2016-12-22 12 views
0

Userは、Auctionsを生成することができ、Auctionsは、付加的なPurchaseを有することができる。Laravel Eloquent relationが列を上書きしますか?

私はすべてPurchases(HEがSOLD 1 - このユーザーがAuctionを作成し、他の誰かがそれを購入した)を取得したいAuctionsテーブルを経由して参照することにより、1 Userから:

オークション id | user_id

購入 id | user_id | auction_id

マイAuctionsテーブルが同じ名前を持つ列user_idを、持っていますテーブルPurchasesの列user_id

私はこのようhasManyThrough方法で、すべてのPurchasesを取得することができます考えた:

ユーザーモデル:

public function sold_purchases() 
    { 
    return $this->hasManyThrough(
     'App\Purchase', 'App\Auction' 
    ); 
    } 

それは予想のほぼとして動作しますが:

フィールドuser_idフェッチの結果から、 Auctionから常にuser_idがあり、それはデータベースにあるように正しいuser_idではなく参照されています(テーブルPurchase。彼らは同じ名前を持っているので、私は何とかこれは混乱すると思う。

これらの列の1つに同義語を付ける方法はありますか?それとも別のことをやっているのですか?

答えて

1

衝突列(あなたのケースでid & user_id)上のあなたのテーブル名を接頭辞select()別名を指定してみてください。

ユーザーモデル:

public function sold_purchases() 
{ 
    return $this->hasManyThrough(
     'App\Purchase', 'App\Auction' 
    )->select([ 
     'purchases.id', 
     'purchases.user_id as purchase_user_id', 
     'auctions.user_id as auction_user_id', 
     'auction_id', 
    ]); 
} 

次に、あなたが行うことができます:

$user = User::find(1); 
$userPurchase = $user->sold_purchases()->first(); // Fetch 1 to test 

そして、あなたの購入モデルはnameプロパティを持っている場合あなたが行うことができます:

dd($userPurchase->name); 
+0

整合性制約違反:注文句の1052列「のcreated_at」は曖昧です。私はおそらくすべてのタイムスタンプを取得します。私は '' auctions.created_atをauction_created_at ''として成功させずに追加しようとしました。とにかくこの答えは正しい方向に進みます – 4ndro1d

+0

もう1つの 'purchase_user'を購入モデルに追加し、オークションにcreate.created_atを追加することによって解決しました。また、purchases.created_at – 4ndro1d

+0

も検索されたオブジェクト変数にアクセスできません$ purchase-> purchase_user ['name']のようなものです。(名前を使用しないでください) – 4ndro1d

関連する問題