Laravel get data from relationship and show in view

有些话、适合烂在心里 提交于 2020-06-26 14:54:08

问题


simply this code is my get data solution, this models are relationships and my result is true but i can't get data from relationship and show that on view, for example;

$data = UserAccountNumber::with(['currency_type'])->orderBy('id', 'DESC')->paginate(50);

this code return below result:

LengthAwarePaginator {#585 ▼
  #total: 2
  #lastPage: 1
  #items: Collection {#601 ▼
    #items: array:2 [▼
      0 => UserAccountNumber {#588 ▶}
      1 => UserAccountNumber {#589 ▼
        #table: "user_account_numbers"
        #guarded: array:1 [▶]
        #connection: null
        #primaryKey: "id"
        #perPage: 15
        +incrementing: true
        +timestamps: true
        #attributes: array:9 [▼
          "id" => 2
          "user_id" => 17
          "account_number" => "24234234"
          "card_number" => "242423423"
          "sheba" => "asdasdad"
          "currency_type" => 5
          "status" => 0
          "created_at" => "2016-05-13 10:55:00"
          "updated_at" => "2016-05-13 10:55:00"
        ]
        #original: array:9 [▶]
        #relations: array:1 [▼
          "currency_type" => CurrencyType {#603 ▼
            #table: "currency_type"
            #fillable: array:3 [▶]
            #dates: array:1 [▶]
            #connection: null
            #primaryKey: "id"
            #perPage: 15
            +incrementing: true
            +timestamps: true
            #attributes: array:7 [▼
              "id" => 5
              "user_id" => 1
              "currency_type" => "EURO"
              "currency_symbol" => "EUR"
              "created_at" => "2016-04-17 12:07:47"
              "updated_at" => "2016-04-17 12:07:47"
              "deleted_at" => null
            ]

View:

in view i can get UserAccountNumber data, but i can not get currency_type and show that on view:

<table class='table-style' cellpadding='0' cellspacing='0'>
    @foreach ($data as $key=>$contents)
        <tr>
            <td>{{$contents->card_number}}</td>
            <td>{{$contents->card_number}}</td>
            <td>{{$contents->seba}}</td>
            <td>{{$contents->created_at}}</td>
            <td>
                {{$contents->currency_type->currency_type}}
            </td>
        </tr>
    @endforeach
</table>

i get error for {{$contents->currency_type->currency_type}} on view.

Error:

Trying to get property of non-object

POST UPDATED:

class UserAccountNumber extends Model
{
    protected $table   = 'user_account_numbers';
    protected $guarded = ['id'];

    public function user()
    {
        return $this->belongsTo('App\Http\Models\User');
    }

    public function currency_type()
    {
        return $this->belongsTo('App\Http\Models\CurrencyType', 'currency_type', 'id');
    }
}

回答1:


First thing to improve is in your UserAccountNumber model. Your currency_type relation should be written like:

public function currencyType()
{
    return $this->belongsTo(CurrencyType::class, 'currency_type', 'id');
}

Your call would then look like:

// using the currencyType() method from above
$data = UserAccountNumber::with('currencyType') 
    ->orderBy('id', 'DESC')
    ->paginate(50);

You then can access the currency type in your with with:

@foreach ($data as $key=>$contents)
    $contents->currencyType->currency_type
@endforeach



回答2:


It seems some of the UserAccountNumber do not have currency_type attached to it. Add something like this to your code:

@if (isset($contents->currency_type))
    {{ $contents->currency_type->currency_type }}
@endif

Or:

{{ $contents->currency_type->currency_type or 'There is not type' }}


来源:https://stackoverflow.com/questions/37211703/laravel-get-data-from-relationship-and-show-in-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!