我无法从 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->click->ip_address
无法检索并出现错误“Facade\Ignition\Exceptions\ViewException Trying to get property 'ip_address' of non-object”
但是,如果我删除它,我可以正确检索 $chirp->user->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】:您与Chirp
和clicks
有很多关系
在这里你得到了很多点击而不是点击
@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->clicks
。
@foreach ($chirp->clicks as $click)
<p>This is click id $click->id </p>
@endforeach
【讨论】:
以上是关于我无法从 Laravel 6 中的相关表(模型)中检索数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 laravel 6 使用两个模型之间的关系从第一个表中获取 field_name?