给定两个表请求的每一个方面的工作:Laravel:关系不
Package
--------
int id
int parcel_id
int order_id
timestamps()
Order
--------
int id
int user_id
int search_id
timestamp shipping_date
timestamps()
有属于一个Order
一个或多个Package
对象,
分别,一个Order
对象有一个或许多Package
对象。
封装模式:
public function order() {
return $this->belongsTo('App\Order');
}
public function parcel() {
return $this->belongsTo('App\Parcel');
}
订货型号:
public function search() {
$this->belongsTo('App\Search');
}
public function user() {
$this->belongsTo('App\User');
}
public function packages() {
$this->hasMany('App\Package');
}
问:
我成功拿到Package
的Order
,但我不能得到Packages
与Order
相关联。这是为什么 ?
我确实有相同的行为,从用户这一次,找到所属的搜索。
当我尝试找到Search-> user时,搜索正常工作。
我有User
的has_many Adresses
完全相同的模型结构,并Address
属于User
,这两种方式效果很好。
我的猜测是,这是因为涉及到这两个表很多键,但我还是给列名到通过belongsTo /的hasMany属性和如果我没有记错,雄辩的关系是建立在列名和表名,而不是“真正的”MySQL关系(外键等)。
插图在PHP工匠修补匠:
>>> $package = App\Package::where('id', 224)->first()
=> App\Package {#800
id: 224,
parcel_id: 2,
weight: 10,
created_at: "2016-12-29 14:00:58",
updated_at: "2016-12-29 14:00:58",
order_id: 115,
}
>>> $package->order
=> App\Order {#743
id: 115,
user_id: 1,
search_id: 1,
created_at: "2016-12-29 14:00:58",
updated_at: "2016-12-29 14:00:58",
shipping_date: "2016-12-29 14:00:58",
}
>>> $order = App\Order::where('id', 115)->first()
=> App\Order {#804
id: 115,
user_id: 1,
search_id: 1,
created_at: "2016-12-29 14:00:58",
updated_at: "2016-12-29 14:00:58",
shipping_date: "2016-12-29 14:00:58",
}
>>> $order->packages
LogicException with message 'Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation'
>>> $order->packages()
=> null
好的,没有'return'关键字。我的不好,问题解决了。 – tomsihap