Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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 Laravel上的搜索查询功能_Php_Laravel - Fatal编程技术网

Php Laravel上的搜索查询功能

Php Laravel上的搜索查询功能,php,laravel,Php,Laravel,我有一本有图像的相册。我在执行搜索功能时遇到问题。我想搜索带有以下标题的照片。以下是我到目前为止所做的 相册表: | id | album_name | sort | |----|------------|------| | 1 | album_1 | 3 | | 2 | album_2 | 2 | | 3 | album_3 | 1 | 照片表: | id | album_id | name | sort | |----|----------|--

我有一本有图像的相册。我在执行搜索功能时遇到问题。我想搜索带有以下标题的照片。以下是我到目前为止所做的

相册表:

| id | album_name | sort |
|----|------------|------|
| 1  | album_1    | 3    |
| 2  | album_2    | 2    |
| 3  | album_3    | 1    |
照片表:

| id | album_id | name  | sort |
|----|----------|-------|------|
| 1  | 1        | name1 | 1    |
| 2  | 1        | name2 | 2    |
| 3  | 2        | name3 | 3    |
以及我的模型上的以下关系:

Photo.php

公共功能相册()
{
返回$this->belongsTo(相册::类);
}
Album.php

public function images()
{
    return $this->hasMany(Photo::class, 'album_id', 'id)->orderBy('sort');
}
GalleryController.php

public function index(Request $request)
{    
    $photos =  Album::has('images')->orderBy('sort')->with('images')->get();
}
    
if (!empty($request->search)) {
    $photos = Album::whereHas('images', function($query) use ($request) {
        $query->where('name', 'like', '%' . $request->search . '%');
    })->with('images')->get();

搜索功能可以工作,但如果我在相册中搜索特定图像,它将返回该相册中的所有图像。

这不是很漂亮,但这基本上就是您想要的。
我已经注释了代码来解释它

if(!empty($request->search)){
$queryString='%'。$request->search'%';
$QUERCYCLOSURE=函数($query)使用($queryString){
$query->where('name','LIKE',$queryString);
};
//仅获取具有与查询字符串匹配的图像的相册。
//这将过滤相册,而不是图像。
$photos=相册::whereHas('images',$querysole)
//现在过滤这些相册的图像。
->使用(['images'=>$querySure])
//归还收藏。
->get();
}
编辑:
我已更新了答案,以使用评论中的建议。

由于两个步骤都重复闭包,我们可以将其存储在变量中以保留代码。

对于特定数据,您需要从查询
where('name,$request->search)中删除
类似的
它将为您提供预期的结果
'name,
缺少结束引号
'
。照原样,
“%”。最好复制/粘贴您的代码,而不是在此处键入Hello,@Espresso抱歉没有正确解释它。搜索功能起作用。让我们假设我在一张专辑中有以下名字。“约翰”、“简”等等。如果我搜索约翰,被检索的就是整张专辑。因为我只需要一张名为“约翰”的照片。“谢谢你的帮助。”我同意了。我用我的手机来做这个。谢谢你提醒我。为什么你要查询相册而不是照片表更干净的方法是定义
$closure=function($query)use($queryString){…}
,然后使用(['images'=>$closure])更新相册::whereHas('images',$closure)->
@TimLewis好主意,我用这个建议更新了答案!您好@JustCarty谢谢您的回答。我试过你的答案,效果很好。我只是在我的头上拧了几下。谢谢你的帮助!干杯另外,谢谢你的建议@Timleiss