給定兩個表請求的每一個方面的工作: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