Laravel 5 变量构造的查询字符串 Eloquent
Laravel 5 Variable Constructed Query String Eloquent
我正在尝试将 JSON 发送到我的 Laravel 服务器和 return Eloquent 查询字符串的结果,该字符串本身是基于 JSON 正在发送。我计划将多个 where
/whereHas
语句链接在一起以实现此目的,但到目前为止我还停留在第一个语句上,想知道这是否可行。
代码:
if(isset($settings->new)){
$assetQuery = "where('created_at','>',".Carbon::now()->subMonths(1).")";
}
if(isset($settings->long)){
$assetQuery = "where('lengthD','Long')";
}
if(isset($settings->short)){
$assetQuery = "where('lengthD','Short')";
}
if(!isset($settings->new)&&!isset($settings->long)&&!isset($settings->short)){
$assetQuery = "where('id','>',0)";
}
$batch = MyModel::whereHas('asset',function ($query) use ($assetQuery){return $query->$assetQuery;})
->orderBy('id', 'desc')->take(20)->get();
$settings
是我的 JSON 的 json_decode
表示。它只有一条指令,其中 in 到达 $assetQuery
。如您所见,如果它没有这些指令中的任何一个,它将选择所有指令 (where('id','>',0)
)。
我的问题是我似乎无法将 $assetQuery
字符串附加到 $batch
Eloquent 行。我该怎么做才能将变量查询串在一起?
我确实看到了这个:
但在那种情况下,变量只用于查询的一小部分,而不是用于整个查询字符串。也许我需要在 function ($query)
函数中移动我的条件?
我不能 100% 确定您的要求,但我认为以下内容对您有用。
$batch = MyModel::whereHas('asset', function ($query) use ($settings){
if(isset($settings->new)){
$query->where('created_at','>',Carbon::now()->subMonths(1));
}
if(isset($settings->long)){
$query->where('lengthD','Long');
}
if(isset($settings->short)){
$query->where('lengthD','Short');
}
if(!isset($settings->new)&&!isset($settings->long)&&!isset($settings->short)){
$query->where('id','>',0);
}
})->orderBy('id', 'desc')->take(20)->get();
我正在尝试将 JSON 发送到我的 Laravel 服务器和 return Eloquent 查询字符串的结果,该字符串本身是基于 JSON 正在发送。我计划将多个 where
/whereHas
语句链接在一起以实现此目的,但到目前为止我还停留在第一个语句上,想知道这是否可行。
代码:
if(isset($settings->new)){
$assetQuery = "where('created_at','>',".Carbon::now()->subMonths(1).")";
}
if(isset($settings->long)){
$assetQuery = "where('lengthD','Long')";
}
if(isset($settings->short)){
$assetQuery = "where('lengthD','Short')";
}
if(!isset($settings->new)&&!isset($settings->long)&&!isset($settings->short)){
$assetQuery = "where('id','>',0)";
}
$batch = MyModel::whereHas('asset',function ($query) use ($assetQuery){return $query->$assetQuery;})
->orderBy('id', 'desc')->take(20)->get();
$settings
是我的 JSON 的 json_decode
表示。它只有一条指令,其中 in 到达 $assetQuery
。如您所见,如果它没有这些指令中的任何一个,它将选择所有指令 (where('id','>',0)
)。
我的问题是我似乎无法将 $assetQuery
字符串附加到 $batch
Eloquent 行。我该怎么做才能将变量查询串在一起?
我确实看到了这个:
但在那种情况下,变量只用于查询的一小部分,而不是用于整个查询字符串。也许我需要在 function ($query)
函数中移动我的条件?
我不能 100% 确定您的要求,但我认为以下内容对您有用。
$batch = MyModel::whereHas('asset', function ($query) use ($settings){
if(isset($settings->new)){
$query->where('created_at','>',Carbon::now()->subMonths(1));
}
if(isset($settings->long)){
$query->where('lengthD','Long');
}
if(isset($settings->short)){
$query->where('lengthD','Short');
}
if(!isset($settings->new)&&!isset($settings->long)&&!isset($settings->short)){
$query->where('id','>',0);
}
})->orderBy('id', 'desc')->take(20)->get();