1

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

我有 2 张桌子

tbl_deals

  • ID
  • 交易ID
  • 商家 ID

tbl_merchants

  • ID
  • 商家 ID
  • 商家网址文本

我将交易模型定义为

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

现在,我想查询所有交易基于 where Mercer_url_text = 我的控制器中的变量

这是我正在尝试的

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

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

我如何通过说 where Mercer_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();

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

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

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

谢谢

4

3 回答 3

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();

希望这可以帮助。

于 2015-12-22T23:03:16.390 回答
0

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

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

反面:如果您只想与匹配的商家交易,请使用 where has。

$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();

我将交易大写,因为它是标准的。在您的示例中,它没有大写。

于 2015-12-23T03:46:34.737 回答
0

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

    DB::table('tbl_merchants')
         ->加入('tbl_deals','tbl_merchants.merchant_id','=','tbl_deals.merchant_id')
         ->where('tbl_merchants.merchant_url_text',$merchant_url_text)
         ->获取();

于 2015-12-23T04:16:24.793 回答