好的,所以我不知道这是否可以完成,但我需要将 2 个表中的 2 个 Where 子句的结果合并到一个变量中。
到目前为止,我正在查询一张表:
$allCompanies = Products::where('category_id', $id->id)->groupBy('company_id')->get();
Run Code Online (Sandbox Code Playgroud)
这是另一个:
$companies = Company::where('visible', 0)->get();
Run Code Online (Sandbox Code Playgroud)
但是有什么办法可以让它们进入同一个查询字符串吗?像这样我可以得到 ID 与一个表中的 ID 列相匹配的位置,并且另一个表中可见的位置为 0?
我试过这个:
$allCompanies = Products::with('company', function($q){
$q->where('visible', 0);
})->where('category_id', $id->id)
->groupBy('company_id')->get();
Run Code Online (Sandbox Code Playgroud)
但得到这个错误:
mb_strpos() expects parameter 1 to be string, object given
Run Code Online (Sandbox Code Playgroud)
公司型号:
mb_strpos() expects parameter 1 to be string, object given
Run Code Online (Sandbox Code Playgroud)
产品型号
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Products extends Model
{
protected $fillable = [
'name',
'description',
'image',
'size',
'price',
'stock',
'company_id',
'category_id'
];
public function category()
{
return $this->belongsTo('App\Categories', 'category_id');
}
public function company()
{
return $this->belongsTo('App\Company', 'company_id');
}
}
Run Code Online (Sandbox Code Playgroud)
当在 中使用回调时with,您应该将回调作为关联数组的值传递。
您的查询应该是:
$allCompanies = Products::with(['company' => function($q) {
$q->where('visible', 0);
}])
->where('category_id', $id->id)
->groupBy('company_id')
->get();
Run Code Online (Sandbox Code Playgroud)
参考: https: //laravel.com/docs/8.x/eloquent-relationships#nested-eager-loading-morphto-relationships