没有枢轴模型的雄辩关系

时间:2019-07-30 07:59:40

标签: php laravel laravel-5 eloquent

我有 3 个表:

  1. customer fields: id, name
  2. item fields: id, name
  3. customer_items fields: customer_id, item_id, qty
正如我们期望的那样,

CustomerItem具有各自的模型。

问题:在没有透视模型的情况下,如何将这两个(客户和项目)相关联?

我想直接使用$customer->items来获取客户商品,而不是执行$customer->customerItem->items,因为我不想跟踪customerItems和客户按商品。 < / p>

此外,我无法直接将customer_items表用于Item模型,因为我可能需要检索其控制器中的所有项目。

2 个答案:

答案 0 :(得分:2)

如@kerbholz所指出的(但他们没有提供答案,而是这样),在您的客户模型中,您需要以下功能:

public interface IMessage : IDisposable
    {
        string Id { get; }
        string CorrelationId { get; set; }
        string MessageContentType { get; }
        TimeSpan? TimeToLive { get; set; }
        AcknowledgementStatus AcknowledgementStatus { get; }
        IDictionary<string, object> CustomHeaders { get; }
        byte[] RawContent { get; }
        void Abandon();
        Task AbandonAsync();
        void Acknowledge();
        Task AcknowledgeAsync();
        IMessage Clone();
        T GetContent<T>();
        T GetContent<T>(IBinarySerializer serializer);
        IDictionary<string, object> GetMessageHeaders();
    }

假设您的Item模型类位于 public function items() { return $this->belongsToMany('App\Item'); } 之内。您也可以在Item模型中进行相反的操作。

现在,您应该可以进行App并获取项目集合了。 如果要包括$customer->items字段,则需要:

qty

请注意,您仍然需要数据透视表,您无法对其进行转义,但是现在可以以一种更加优雅的方式对其进行导航。

答案 1 :(得分:0)

创建customer_items表,并包含custmer_item_iduser_id。在User模型中,包括此功能

public function basket() // example
    {
        return $this->belongsToMany(User::class, 'customer_items', 'user_id', 'custmer_item_id');
    }