[英]Two relationships between two same models/tables
您好,我在嘗試使兩個模型(Laravel 5.5)之間建立兩個關系時遇到麻煩: Order
和User
。
1 -----米| User
(作為客戶)可以發出多個Order
1 -----米| User
(作為員工)可以接受多個Order
因此,在我的orders
表中,我將user_id
和employee_id
作為外鍵。
現在,某些訂單沒有初始的employee_id
因為需要接受訂單,然后設置該值。
使用修補匠,我找到了這個Order
對象(id:30),它有一個user_id
和一個employee_id
但是當我dd()
時,它返回:
=> App\Models\Order {#882
order_id: 30,
user_id: 7, // <-- foreign key
employee_id: 6, // <-- foreign key
restaurant_id: 4, // <-- foreign key (for other table)
// ...
total: "120.00",
created_at: "2018-01-31 00:15:41",
updated_at: "2018-01-31 00:15:41",
deleted_at: null,
restaurant: App\Models\Restaurant {#900 // <- MY RESTAURANT RELATION (M-1)
restaurant_id: 4,
name: "Stark, Padberg and Buckridge",
// ...
// ...
created_at: "2018-01-12 18:18:17",
updated_at: "2018-01-12 18:18:17",
deleted_at: null,
},
customer: App\Models\User {#914 // <- MY CUSTOMER RELATION (M-1)
user_id: 7,
restaurant_id: 4,
// ...
created_at: "2018-01-30 17:52:33",
updated_at: "2018-01-30 23:32:00",
deleted_at: null,
},
deliverer: null, // <-- THIS SHOULD CONTAIN THE EMPLOYEE DATA
// THAT BELONGS TO THE DELIVERER RELATION
}
我究竟做錯了什么?
我的邏輯信息。
在我的Order
模型中,我已經定義了其他關系(我的所有主鍵都遵循這個約定: model_id
):
/**
* Return the user who created the order.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function customer()
{
return $this->belongsTo(
'App\Models\User',
'user_id',
'user_id'
);
}
/**
* Return the employee (user) who deliver the order.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function deliverer()
{
return $this->belongsTo(
'App\Models\User',
'employee_id',
'user_id'
);
}
/**
* A customer can make many orders
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function ordersMade()
{
return $this->hasMany('App\Models\Order',
'user_id',
'user_id'
);
}
/**
* An employee attends many orders.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function ordersDelivered()
{
return $this->hasMany('App\Models\Order',
'employee_id',
'user_id'
);
}
這是我的orders
表的架構:
這是我的users
表的架構:
是的,我有ID為6
和7
用戶:
在Tinker中,我已經完成了:
>>> $o = App\Models\Order::find(30);
>>> $o->customer;
>>> $o->restaurant;
>>> $o->deliverer;
>>> $o;
好吧,我的代碼沒有任何問題。 我在模型softDeletes
設置為true
,因此我試圖獲取“已刪除”元素的屬性。
就如此容易。 感謝@MahdiYounesi,他讓我檢查了一下。
盡管該問題幾乎是一個愚蠢的問題,但值得注意的是,當您從實體查詢softDeleted
需要返回softDeleted
記錄時,您可以-正如文檔 withTrashed()
-在需要這種查詢的每個查詢中添加withTrashed()
的結果,或者在定義如下關系時直接在模型中:
/**
* Return the user who created the order.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function customer()
{
return $this->belongsTo(
'App\Models\User',
'user_id'
)->withTrashed();
}
/**
* Return the employee (user) who deliver the order.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function deliverer()
{
return $this->belongsTo(
'App\Models\User',
'employee_id',
'user_id'
)->withTrashed();
}
這將收集“已刪除”數據,例如對歷史信息有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.