考えると二つのテーブルで作業されていません。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
に属している1つのまたは多数のPackage
オブジェクト、それぞれ
、1つのOrder
オブジェクトが1つを持っているがあります。または多くの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
を取得するには成功したが、私がすることはできません0を得るはOrder
に関連付けられています。何故ですか ?
私は、これとは逆の動作をUserから行い、所属するSearchを見つけます。
検索 - >ユーザーを検索しようとすると、正しく検索されます。
私はUser
にhas_many Adresses
、およびAddress
とまったく同じモデルの構造は、両方の方法でうまく機能User
に属しています。
私の推測では、両方のテーブルに関わる多くのキーがあるので、それはだということですが、私はまだ私が正しくリコール場合、雄弁関係は、カラム名とテーブル名に基づいていますbelongTo/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