使用Table Laravel 5.2加入模型

时间:2015-12-22 19:44:14

标签: laravel join eloquent laravel-5.1 laravel-5.2

我在Laravel中创建了一个模型。

class deals extends Model
{
//
protected $table = 'tbl_deal';
}

现在我想使用此模型在Controller中检索数据。但是,从此模型中提取的数据也需要受另一个表中的列的约束。以下是基本架构

tbl_deal

  • deal_id
  • merchant_id
  • deal_text

tbl_merchant

  • MERCHANT_ID
  • merchant_url_text

我当前的Controller有以下代码从交易模型中提取所有交易。

$deals = deals::all();

我想通过merchant_url_text约束交易。由于这是在商家表中,我需要加入现有的交易模型。

有关如何在我的控制器中执行此操作的任何帮助,以及这是解决此类问题的正确方法。

感谢。

1 个答案:

答案 0 :(得分:2)

添加到您的deals模型

以下函数(称为relationship):

public function merchant()
{
   return $this->belongsTo(Merchant::class, merchant_id);
}

现在您可以使用

与商家达成所有优惠
$deals = deals::with('merchant')->get();

例如,显示第一个使用:

$deal = $deals->first();
echo $deal->merchant->merchant_url_text;

但是要使用此功能,您还需要创建Merchant模型并使用此方法,不会使用join

如果您想在这种情况下使用简单连接而不是关系,可以使用:

$deals = deals::selectRaw('tbl_deal.*, tbl_merchant.merchant_url_text')
              ->leftJoin('tbl_merchant','tbl_deal.merchant_id','=','table_merchant.merchant_id')->get();

现在要显示您可以使用的第一个商家文本:

$deal = $deals->first();
echo $deal->merchant_url_text;

我强烈建议在编写任何代码之前阅读Laravel文档以完全理解基本的Laravel概念(例如,通过模型名称应为Deal而不是deals,并且表名应为{{1}而不是deals,类似于主键 - 它应该是简单的tbl_deal而不是id)。