Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉雷维尔,如果有其他人在哪里_Php_Laravel_Query Builder - Fatal编程技术网

Php 拉雷维尔,如果有其他人在哪里

Php 拉雷维尔,如果有其他人在哪里,php,laravel,query-builder,Php,Laravel,Query Builder,在我的Laravel项目中,我正在使用一些条件构建一个查询。 有一个问题我想不通 我有一个问题如下 $query = SocialMediaFeed::where('location_id', $location_id); 现在有一些提要项的'self'=true。。除非有$filters数组,否则应首先从结果中忽略这些 if(!$filters) { $query = $query->where('self', '<>', true); } if(!$filter

在我的Laravel项目中,我正在使用一些条件构建一个查询。 有一个问题我想不通

我有一个问题如下

$query = SocialMediaFeed::where('location_id', $location_id);
现在有一些提要项的'self'=true。。除非有$filters数组,否则应首先从结果中忽略这些

if(!$filters) {
    $query = $query->where('self', '<>', true);
}
if(!$filters){
$query=$query->where('self','',true);
}
现在我想知道,如果有过滤器,它应该包括我在self不等于true时得到的数据,如果它为true,也应该包括数据。。 我尝试了下面的方法,但是它只返回self=true的帖子,而不是与self=true组合的所有帖子

$query = $query
    ->where('self', '<>', true)
    ->where('self', true)
    ->orWhereNull('self');
$query=$query
->其中('self','',true)
->其中('self',true)
->orWhereNull(“自我”);

因此,如果您有过滤器,则无需执行任何操作:

$query = SocialMediaFeed::where('location_id', $location_id);

if (!$filters) {
  $data= $query->where('self',true)->get();
} else {
  $data= $query->get();
}
您可以为此使用:

// false: All social media feeds except where self is not true
// true: All social media feeds
$filters = false;
$query = SocialMediaFeed::where('location_id', $location_id)
->when(!$filters, function ($query) {
    return $query->where('self', '!=', true);
})->get();

过滤器只能减少结果集,而不能增加结果集。想想过滤器在现实生活中做了什么,它删除了一些东西,却从不添加它们

如果我理解你的要求,我会这样做:

$query = SocialMediaFeed::where('location_id', $location_id);
if(!$filters) {
    $query = $query->where('self', '<>', true);
} else {
    $query = $query->orWhere('self', true);
}
$query=SocialMediaFeed::where('location\u id',$location\u id);
如果(!$filters){
$query=$query->where('self','',true);
}否则{
$query=$query->orWhere('self',true);
}
当未设置$filters时,这将返回location\u id=$location\u id和self-true的所有行,以及location\u id=$location\u id或self=true的所有行

如果您真的只需要进行一次查询,然后对其进行过滤,则可以反向执行,在未设置$filters时,查询location\u id=$location\u id或self=true并过滤掉self=true

但是,您发布的这段代码并没有真正意义:

$query = $query
   ->where('self', '<>', true)
   ->where('self', true)
   ->orWhereNull('self');
$query=$query
->其中('self','',true)
->其中('self',true)
->orWhereNull(“自我”);
我想你应该复习一下。对where的多个调用与'AND'连接,因此self=true和self-true将以0结果结束


所以我不是100%确定你想要什么。我希望我回答了你的问题。

那么,如果你有过滤器,那么应该加载所有数据,并且应该忽略
self
列?然后在
self
列上不需要任何过滤器。你能为你的问题举出一些例子吗?例如,如果没有过滤器,我会有10个结果,如果self=true,它也应该加载到来自所有者的Socialmedia中,这样会有15个结果,但现在我只得到5个结果,所以只有self=true而不是我需要的15个。。谢谢你的回答如果有一个过滤器,我也需要self=true,但也需要self=false,假设没有过滤器,应该有10个结果,但是有了过滤器,我需要得到15个,因此需要添加self=true的5个。。谢谢你的回答,这正是这个答案的作用。如果你想要对和错,就不要在
self
上过滤。为什么?当存在筛选器时,将返回self=true、false、null或notnull,只是不执行where查询。尝试上面的代码请更新您的问题以包含生成查询的整个代码,因为其他地方可能有错误。然后尝试使用以下内容更新行:
$data=$query->where('self',!=,false)->get()谢谢你的回答,因为我有多个自过滤器(用于Facebook、Instagram)。多亏了你,我想出了以下代码,唯一的问题是现在它显示了facebook和/或instagram的自传,如果这些都包含在$filters中,但是其他帖子没有显示。。。有什么想法吗?我认为这里需要做的一个有价值的更改是使用
when()
querybuilder方法,而不是打破链:$query=SocialMediaFeed::where('location_id',$location_id)–when($filters,function($query){return$query->where('self','',true);},function(){return return$query->orWhere('self',true);});出于某种原因,我无法在注释中使用代码格式,即使有4个空格缩进,呃。@Notflip如果不真正了解您的底层数据结构和总体目标,就很难说了。@FatBoyXPC,我真的不明白您为什么这样做。我的方法是(对我来说)更符合逻辑/更清晰,我看不出你的方法会有任何效果。但这就是为什么软件开发更像是艺术而不是科学。通往涅盘的道路有很多。:@MarcRunkel这样做的主要好处是不会打破链条。然而,这只是“不清楚”,因为有些人可能不知道该方法是如何工作的。我是“使用所提供的工具”的忠实粉丝,如果你说“这很糟糕,因为人们不知道它”——我认为无知不是借口。如果你不经常学习,坦白说,我不希望你加入我的团队。