User
可以创建Auctions
,而Auctions
可以添加Purchase
。
我想通过{{1}引用,从一个Purchases
获取所有Auction
(此用户创建的User
和其他人购买的那个)Auctions
} table:
拍卖
id | user_id
购买
id | user_id | auction_id
我的Auctions
表格中有一列user_id
,其名称与user_id
表中的Purchases
列相同。
我认为我可以使用Purchases
方法获取所有hasManyThrough
,如下所示:
用户模型:
public function sold_purchases()
{
return $this->hasManyThrough(
'App\Purchase', 'App\Auction'
);
}
它几乎按预期工作但是:
来自提取结果的字段user_id
始终具有来自user_id
的{{1}}引用它而不是正确的Auction
,因为它在数据库中(In表格user_id
。由于它们具有相同的名称,我猜不知道这会搞砸了。
有没有办法给其中一个列提供同义词?或者我做错了什么?
答案 0 :(得分:1)
尝试使用select()
指定别名,并在碰撞列(id
& user_id
的情况下使用您的表名作为前缀):
用户型号:
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
如果购买模型具有名称属性,则可以执行以下操作:
dd($userPurchase->name);