【发布时间】:2018-07-11 00:03:18
【问题描述】:
问题
您好,我在尝试在两个模型(Laravel 5.5)之间建立两个关系时遇到了一些麻烦:Order 和 User。
1-----m |一个User(作为客户)可以赚很多Orders
1-----米 |一个User(作为员工)可以带很多Orders
所以,在我的orders 表中,我有user_id 和employee_id 作为外键。
现在,有些订单没有初始employee_id,因为需要接受订单,然后我设置了该值。
使用 tinker,我找到了这个 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;
【问题讨论】:
-
您有 id 为 6 的用户吗?
-
你能展示你在 Tinker 中运行什么来获得输出吗?
-
@MahdiYounesi 我已经更新了我的问题以添加所需的信息。
-
@MahdiYounesi 哦,我的上帝。我忘记了我激活了softDeletes,所以记录会持续,但“逻辑上”该对象被删除。我觉得自己很愚蠢,我已经审查了我的代码将近几个小时了。
-
@HCK 很高兴您的问题得到解决
标签: php mysql laravel foreign-keys laravel-5.5