查询Laravel 5.2中的关系

时间:2015-12-22 22:42:45

标签: laravel-5.1 laravel-5.2

我在尝试查询Eloquent关系时遇到问题。

我有2张桌子

tbl_deals

  • ID
  • DEAL_ID
  • MERCHANT_ID

tbl_merchants

  • ID
  • MERCHANT_ID
  • merchant_url_text

我将交易模型定义为

class deal extends Model
{
    public function merchant() {
        return $this->hasOne('App\merchant', 'merchant_id', 'merchant_id');
    }
}

现在,我想查询所有交易,其中merchant_url_text =我的控制器中的变量

这是我正在尝试的事情

$deals = deal::with('merchant')->get(); //Retrieving all the deals with merchants 

如果我退回$ deals,它会给我所有关于商家关系的交易。

如何通过说出merchant_url_text = $ variable

的位置约束交易

我正在尝试

return $deals->where('merchant_url_text', $merchant_url_text)->get();

但它给我一个错误说:

  

“Illuminate \ Support \ Collection :: get()缺少参数1,在...中调用”

我尝试查找文档以查询Laravel Docs中的关系。它谈到了这个例子

$user = App\User::find(1);

$user->posts()->where('active', 1)->get();

在这种情况下,它试图让第一个用户找到与用户相关的相应帖子。

在我的情况下,我想要从所有交易中过滤,这些交易中有merchant_url_text =我控制器中的特定变量。

有关如何实现这一目标的任何帮助?

由于

3 个答案:

答案 0 :(得分:1)

请尝试以下代码:

$specific_merchant_url_text = "i don't know";
$deals_with_specific_merchant_url_text = [];
$deals = deal::with('merchant')->get();

foreach($deals as $deal)
     if( $deal->merchant->merchant_url_text==$specific_merchant_url_text)
          array_push($deals_with_specific_merchant_url_text, $deal);

因此,您可以在deals_with_specific_merchant_url_text中获得特定商家网址文字的一系列交易。

使用DB对象的另一种方法:

$deals = DB::table('deals')
        ->join('merchants', 'deals.merchant_id', '=', 'merchants.id')
        ->select('deals.*')
        ->where('merchants.merchant_url_text', $merchant_url_text)
        ->get();

您的raw

$deals = deal::selectRaw('tbl_deals.*')
         ->Join('merchants','deals.merchant_id','=','merchants.merchant_id')            
         ->where('merchants.merchant_url_text', '=', $merchant_url_text) ->get();

希望这有帮助。

答案 1 :(得分:0)

带回调。这将带回所有交易,但只有匹配的热切负载商家。

$deals = Deal::with(['merchant' => function ($query) use ($url_text){
    return $query->where('merchant_url_text', $url_text);
}])->get();

翻转方:如果您只想与匹配的商家进行交易,请使用where where。

$deals = Deal::whereHas('merchant', function ($query) use ($url_text){
    return $query->where('merchant_url_text', $url_text);
})->get();

如果你想要两者,请将它们链接起来:

$deals = Deal::whereHas('merchant', function ($query) use ($url_text){
    return $query->where('merchant_url_text', $url_text);
})->with(['merchant' => function ($query) use ($url_text){
    return $query->where('merchant_url_text', $url_text);
}])->get();

我将交易资本化,因为它是标准的。在你的例子中没有大写。

答案 2 :(得分:0)

您可以使用查询构建器连接查询。


    DB::table('tbl_merchants')
         ->join('tbl_deals', 'tbl_merchants.merchant_id', '=','tbl_deals.merchant_id')
         ->where('tbl_merchants.merchant_url_text',$merchant_url_text)
         ->get();