2016-12-29 4 views
2

考えると二つのテーブルで作業されていません。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'); 
} 

質問:

私はPackageOrderを取得するには成功したが、私がすることはできません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 
+0

いいえ、 'return'キーワードはありません。私の悪い、問題解決。 – tomsihap

答えて

3

あなたは、あなたの注文のモデルにreturn文が欠落。

public function search() { 
    return $this->belongsTo('App\Search'); 
} 
public function user() { 
    return $this->belongsTo('App\User'); 
} 
public function packages() { 
    return $this->hasMany('App\Package'); 
} 

あなたはvoidを返していましたが、これはラーベル関係ではありません。 ;)

+0

お返事ありがとうございました。私は100%確信していましたが、似たような質問を読んだ後にそれを逃したことはありませんでした。多くの同様のファイルを扱うことは、十分なカフェインがなければ、圧倒的になることがあります。 – tomsihap

関連する問題