Laravel Eloquent关系覆盖了专栏?

时间:2016-12-22 21:00:21

标签: laravel-5 orm eloquent relational-database

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。由于它们具有相同的名称,我猜不知道这会搞砸了。

有没有办法给其中一个列提供同义词?或者我做错了什么?

1 个答案:

答案 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);