我在尝试查询Eloquent关系时遇到问题。
我有2张桌子
tbl_deals
tbl_merchants
我将交易模型定义为
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 =我控制器中的特定变量。
有关如何实现这一目标的任何帮助?
由于
答案 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();