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

Posted

技术标签:

【中文标题】我无法从 Laravel 6 中的相关表(模型)中检索数据【英文标题】:I can't retrieve data from the related table(model) in Laravel6 【发布时间】:2020-08-13 04:32:51 【问题描述】:

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

有 3 个模型(表)。

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

然后我想从 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');
    

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-&gt;click-&gt;ip_address 无法检索并出现错误“Facade\Ignition\Exceptions\ViewException Trying to get property 'ip_address' of non-object”

但是,如果我删除它,我可以正确检索 $chirp-&gt;user-&gt;name

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

谢谢。

【问题讨论】:

可以有多次点击..所以你必须使用foreach hasMany 关系上,您将获得集合而不是模态。因此,您将不得不遍历数据。它在 Laravel 文档中有很好的记录。 HasMany 【参考方案1】:

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

    检查啁啾变量是否在控制器中有任何数据。

    dd($chirps);

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

【讨论】:

【参考方案2】:

您与Chirpclicks 有很多关系

在这里你得到了很多点击而不是点击

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

【讨论】:

【参考方案3】:

您还需要循环点击:

@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

【讨论】:

【参考方案4】:

啁啾有很多点击(不是点击)。你必须在你的刀片中 foreach $chirp-&gt;clicks

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

【讨论】:

以上是关于我无法从 Laravel 6 中的相关表(模型)中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Laravel 中的模型视图中显示数据

在laravel中的两个相关模型中过滤

Laravel 5.4雄辩的一对多关系

如何使用 laravel 6 使用两个模型之间的关系从第一个表中获取 field_name?

根据Laravel Vue Js Api中的关系从多个表中删除数据

Laravel - 渴望加载多态关系的相关模型