首页 > 解决方案 > 我无法从 Laravel6 中的相关表(模型)中检索数据

问题描述

我无法从相关表中检索数据。

有3个模型(表)。

然后我想从 Chirp 模型中检索 User & Click 的数据。所以我写道:

啁啾.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Chirp extends Model
{
    public $timestamps = false;

    protected $guarded = [];

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

    public function clicks()
    {
        return $this->hasMany('App\Click');
    }
}

家庭控制器.php

class HomeController extends Controller
{

    public function index()
    {
        $chirps = Chirp::with(['user','clicks'])
        ->orderBy('posted_at', 'desc')
        ->get();

        return view('home', ['chirps' => $chirps]);
    }
}

主页.blade.php

@foreach($chirps as $chirp)
<div>
    <div>by
    <b>{{ $chirp->user->name }}</b>
        on
        <small>{{ $chirp->posted_at }}</small>
    </div>

    <div>
        <p>{{ $chirp->text }}</p>
        <p>{{ $chirp->click->ip_address }}</p>
    </div>
</div>
@endforeach

在 home.blade.php 中,{{ $chirp->click->ip_address }}无法检索并出现错误“Facade\Ignition\Exceptions\ViewException Trying to get property 'ip_address' of non-object”

但是,如果我删除它,我可以{{ $chirp->user->name }}正确检索。

为什么我不能从 Chirp 模型中检索 Click 模型,而我可以从 Chirp 模型中检索 User 模型?

谢谢你。

标签: laraveleloquent-relationship

解决方案


您还需要循环点击:

@foreach($chirps as $chirp)
<div>
    <div>by
    <b>{{ $chirp->user->name }}</b>
        on
        <small>{{ $chirp->posted_at }}</small>
    </div>

    @foreach($chirp->clicks as $click)
        <div>
            <p>{{ $chirp->text }}</p>
            <p>{{ $click->ip_address }}</p>
        </div>
    @endforeach
</div>
@endforeach

推荐阅读