没有收到与 whereHas Laravel 相关的数据

Posted

技术标签:

【中文标题】没有收到与 whereHas Laravel 相关的数据【英文标题】:Data is not received in relation to whereHas Laravel 【发布时间】:2021-09-23 08:58:41 【问题描述】:

我一直在尝试查询 whereHas 并且无法检索数据。 看看我是怎么尝试的。 在我将另一个如何获取数据的位置放在另一个位置之后,我创建了一个 whereHas where 我有一个查询功能。 请记住 where 指的是偏差而不是 discount_codes

public function showPopupData(Request $request)
    
        $id = Auth::user()->company_id;

        $data = Popup::getPopupByCompanyId($id);

        $biases = Bias::whereHas('discount_codes', function ($query) 
            $query->where('discount_code.id', '=', 'bias.discount_code_id');
        )->get();
       

        return response()->json(['data' => $data, 
                        'biases' => $biases
                        ]);
    

应该保持,在下一个关系中,我也收到了与我有关系的数据。

 $biases = Bias::with('discount_codes')->where('company_id', '=', $id)->get();

型号

public function discount_codes()
    
        return $this->belongsTo('App\Models\DiscountCode', 'discount_code_id', 'id');
    
 public function biases() 
    
        return $this->hasMany('App\Models\Bias', 'id', 'discount_code_id');
    

表格

Discount code
$table->increments('id');
            $table->string('discount_code')->nullable();
Bias
 $table->integer('discount_code_id')->nullable()->unsigned();
 $table->foreign('discount_code_id')->references('id')->on('discount_codes')->onDelete('cascade');

你认为我在这里做错了什么?

【问题讨论】:

【参考方案1】:

首先,您的代码是多余的。

Bias::whereHas('discount_codes', function ($query) 
    $query->where('discount_code.id', '=', 'bias.discount_code_id');
)->get();

您已经通过调用关系使用主键和外键连接了两个表。您不必再次检查 id。

如此简单的with 工作正常

$biases = Bias::with('discount_codes')->where('company_id', $id)->get();

现在,如果您只想要那些具有 discount_codes 的记录,您可以检查与 has 的关系是否存在

$biases = Bias::has('discount_codes')->with('discount_codes')->where('company_id', $id)->get();

现在在你的偏见关系中,你把钥匙放在了错误的地方。应该是

public function biases() 

    return $this->hasMany('App\Models\Bias', 'discount_code_id', 'id');

最后你弄乱了命名约定。您应该考虑遵循标准命名约定。

【讨论】:

【参考方案2】:

这里不需要关系 "whereHas" 条件,因为 "has" 函数的作用与您在此处尝试实现的相同,只需使用 "has" 运算符即可。

$biases = Bias::has('discount_codes')->get();

【讨论】:

【参考方案3】:

我觉得你可以用has()

$biases = Bias::with('discount_codes')->has('discount_codes')->get(); 

【讨论】:

以上是关于没有收到与 whereHas Laravel 相关的数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent:如何通过 whereHas() 方法获取相关记录?

Laravel Eloquent 在 whereHas() 上进行选择

Laravel whereHas 跨两个独立的数据库

Laravel - 搜索关系,包括 whereHas 中的 null

Laravel 雄辩用 whereHas 或其他限制 withCount

Laravel - whereHas() 中关系的最新记录