我无法从Laravel6中的相关表(模型)中检索数据

时间:2020-04-29 06:51:45

标签: laravel eloquent-relationship

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

有3个模型(表)。

  • 用户
  • Chi(具有'user_id'作为外键)
  • 单击(具有“ chirp_id”作为外键)

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

Chirp.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');
    }
}

HomeController.php

class HomeController extends Controller
{

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

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

home.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试图获取非对象的属性'ip_address'”

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

为什么我不能从Chirp模型中检索Click模型,却能从Chirp模型中检索用户模型?

谢谢。

4 个答案:

答案 0 :(得分:2)

您还需要循环点击:

@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

答案 1 :(得分:1)

线性调频有很多点击(没有点击)。您必须在刀片中插入$chirp->clicks

@foreach ($chirp->clicks as $click)
    <p>This is click id {{ $click->id }}</p>
@endforeach

答案 2 :(得分:1)

您与Chirpclicks有很多关系

在这里,您获得的点击次数多于点击次数

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

答案 3 :(得分:1)

要调试此问题,您可以采取以下步骤:

  1. 检查chirps变量在控制器内是否有任何数据。

    dd($ chirps);

  2. 如果您知道自己有数据,则可以采取一些措施使刀片更好。 因为它具有多对多关系,所以您应该遍历数据。
    @foreach($chirps as $chirp)
    @foreach($chirp->clicks as $click)
                <div>
                    <p>{{ $chirp->text }}</p>
                    <p>{{ $click->ip_address }}</p>
                </div>
            @endforeach
    @endforeach