【发布时间】:2017-09-29 03:41:23
【问题描述】:
我有点难以准确理解 Laravel 在这里试图传达什么以及 Eloquent 如何建立/附加这些关系。
Property [owner] does not exist on this collection instance.
我正在创建一个客户支持收件箱,客户可以在其中发送工单,管理员可以回复。
我希望能够在消息中提取用户的姓名和一些详细信息,以便代表知道他们在与谁交谈。目前有三张桌子在玩:tickets, users, & replies。我也会在这里分解结构:
Tickets: id, user_id, body, active (boolean), datestuff... | relates to the Ticket model
replies: id, user_id, ticket_id, body, datestuff | relates to the Reply model.
我通过owner的公共方法在$this->belongsTo(User::class,'user_id');的Ticket模型中定义了关系
public function owner()
{
// ESTABLISH RELATIONSHIP
$this->belongsTo(User::class, 'user_id');
}
但是当我尝试检索以下内容时,我检索到标题中的错误。从门票控制器
$tickets = Ticket::latest()->get();
return $tickets->owner;
我无法{{ $ticket->owner->first_name }} 或我想提取的用户的任何详细信息。
要么我对 Eloquent 的基本理解不正确,要么需要分配其他内容才能启用此功能?
我一直在关注 Laracast 的这一集,在这里用 Thread 代替 Ticket,但 Reply 命名空间仍然存在。虽然我没有检索与回复关联的用户数据,而是检索初始票证的用户数据。
https://laracasts.com/series/lets-build-a-forum-with-laravel/episodes/3
【问题讨论】:
-
首先你需要使用return来返回关系对象,其次你必须告诉用户ids是table1name.id,tablename2.id如果两者都不是以表名命名的,那么返回$ this->belongsTo(User::class,'table1name.id', 'tablename2.id');
-
尝试 $Ticket = Ticket::with("owner")->latest()->get(); 然后尝试 $Ticket->owner
-
如果您想从用户表中检索特定信息,那么您可以尝试这样 $Ticket = Ticket::with(["owner" => function($q){ return $q-> select("..","..");}]->latest()->get();
标签: laravel eloquent relationships