此集合实例

时间:2017-09-28 19:10:04

标签: laravel eloquent relationships

我很难掌握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.

我已通过$this->belongsTo(User::class,'user_id');

的公开方法在owner的故障单模型中定义了这种关系
public function owner()
    {
        // ESTABLISH RELATIONSHIP

        $this->belongsTo(User::class, 'user_id');

    }

但是当我尝试检索下面的内容时,我会检索标题中的错误。来自TicketsController

$tickets = Ticket::latest()->get();
return $tickets->owner;

我无法{{ $ticket->owner->first_name }}或我想提及的任何有关用户的详细信息。

我对Eloquent的基本理解是不正确还是还需要分配其他东西以启用此功能?

我跟随Laracast的这一集一直在用Thread for Ticket代替,但是回复命名空间仍然存在。虽然我没有检索与回复相关联的用户数据,而是检索初始票证的用户数据。

https://laracasts.com/series/lets-build-a-forum-with-laravel/episodes/3

1 个答案:

答案 0 :(得分:1)

$tickets = Ticket::latest()->get();
return $tickets->owner;

此代码获取了集合的故障单。 该集合中的每个故障单都有拥有所有者。

foreach($tickets as $ticket) {
    // this is where you have $ticket->owner;
}

你的owner()函数也没有返回关系 - 它会创建一个,但不会对它做任何事情。这个工作:

public function owner() {
    return $this->belongsTo(User::class, 'user_id');
}