mb_strpos()要求参数1为字符串,即在Laravel中查询2个表时给定的对象

mb_strpos()要求参数1为字符串,即在Laravel中查询2个表时给定的对象,laravel,eloquent,Laravel,Eloquent,好的,我不知道是否可以这样做,但我需要将两个表中的两个Where子句的结果合并到一个变量中 到目前为止,我一直在查询一个表: $allcompanys=Products::where'category\u id',$id->id->groupBy'company\u id'->get; 另一方面: $companys=Company::where'visible',0->get; 但是有没有办法让它们进入相同的查询字符串?这样我就可以得到一个表中ID与ID列匹配的位置,而另一个表中可见的是0 我

好的,我不知道是否可以这样做,但我需要将两个表中的两个Where子句的结果合并到一个变量中

到目前为止,我一直在查询一个表:

$allcompanys=Products::where'category\u id',$id->id->groupBy'company\u id'->get; 另一方面:

$companys=Company::where'visible',0->get; 但是有没有办法让它们进入相同的查询字符串?这样我就可以得到一个表中ID与ID列匹配的位置,而另一个表中可见的是0

我试过这个:

$allCompanies=Products::带有'company',函数$q{ $q->where'visible',0; }->其中'category_id',$id->id ->groupBy'company_id'->get; 但我犯了这个错误:

mb_strpos() expects parameter 1 to be string, object given
公司模式:


实现这一点最有效的方法是通过和。如果定义了关系,则可以执行以下操作:

$products=products::其中'category_id',$id->id ->哪里有“公司”,功能$q{ $q->where'visible',0; };
它将查询具有特定类别id的所有产品,这些产品也与具有值为0的可见列的公司有关系,这取决于您想要什么:

如果您想从可见公司购买所有产品:

$products = Products::whereHas('company', function($q) {
   $q->where('visible',0);
})->get();
如果您希望所有公司都提供其产品,我建议:

$Companies = Company::with('products')->where('visible',0)->get();

可悲的是,这没有带来任何结果,如果您更改->获取->toSql,您可以看到运行的是什么SQL,这可能更容易调试。我从'products'那里获得select*,从'companys'那里获得select*,从'products'那里获得select*。'company\u id`='companys`.'id`和'visible`=?我建议直接在数据库中运行它,并调整该查询以获得所需内容,并查看发生的情况。子查询是否从visible=0的公司中选择*返回正确的公司?他们的产品与这些公司有关联吗?嗯,好吧,运行起来,我可以看到不同,因为我可以将“可见”查询更改为1或0,它显示不同的回报,但出于某种原因,我看到每个公司重复几十次。
$Companies = Company::with('products')->where('visible',0)->get();