搜索哪里有
Search Where Has
所以我有一个 Post table,其中每个 post 都在一个相册中,我想通过 post 属性进行搜索,但还要带上 post 的相册在查看中,我该怎么做?
我试过在控制器中使用它
$posts = album::whereHas('post', function($q) use ($search) {
$q->where('nama', 'like', "%$search%", 'or')->where('deskripsi', 'like', "%$search%");
})->get();
这是我的 blade 视图,首先显示专辑,然后 post
@foreach($posts as $p )
.....
@foreach($p->post->where('nama', 'like', "%$search%", 'or')->where('deskripsi', 'like', "%$search%") as $post)
....
@endforeach
@endforeach
但问题是它给了我所有的专辑,甚至是没有 post 的专辑。我的英语不是最好的,但我希望你能理解
将此添加到您的 Post 模型中:
$with = ['album'];
,它假设将相册模型添加到从数据库中检索到的每个 post。如果关系方法(在 Post 模型中)的名称与 album
不同,请相应地更改此数组。
然后只需使用此查询:
$posts = Post::where('nama', 'like', "%$search%")->orWhere('deskripsi', 'like', "%$search%")
->get();
然后像这样迭代:
@foreach($posts as $p)
{{ $p->album->title }}
@endforeach
如下更改您的查询:
$albums = album::whereHas('post', function($q) use ($search) {
$q->where('nama', 'like', '%'.$search.'%')
})
->orWhereHas('post', function($q) use ($search) {
$q->where('deskripsi', 'like', '%'.$search.'%')
})
->get();
你眼中的沙涅:
@foreach($albums as $album )
..... // display here album data
@foreach($album->post as $post)
.... // display here post data
@endforeach
@endforeach
编辑:
在您的相册模型中,为 post 定义新关系:
public function searchedPosts($search = null)
{
$posts = $this->hasMany('App\Post'); // your model path
if($search!=null){
$posts->where('nama', 'like', '%'.$search.'%')->orWhere('deskripsi', 'like', '%'.$search.'%');
}
return $posts;
}
如下更改您的查询:
$albums = album::with('post)->whereHas('post', function($q) use ($search) {
$q->where('nama', 'like', '%'.$search.'%')
})
->orWhereHas('post', function($q) use ($search) {
$q->where('deskripsi', 'like', '%'.$search.'%')
})
->get();
改变你的观点如下:
@foreach($albums as $album )
..... // display here album data
@foreach($album->searchedPosts($search)->get() as $post)
.... // display here post data
@endforeach
@endforeach
public function search(Request $request)
{
$query = $request->input('query');
$posts = Post::where('title','LIKE',"%$query%")
->approved()->publish()->get();
return view('FrontPage.search',compact('posts','query'));
}
所以我有一个 Post table,其中每个 post 都在一个相册中,我想通过 post 属性进行搜索,但还要带上 post 的相册在查看中,我该怎么做?
我试过在控制器中使用它
$posts = album::whereHas('post', function($q) use ($search) {
$q->where('nama', 'like', "%$search%", 'or')->where('deskripsi', 'like', "%$search%");
})->get();
这是我的 blade 视图,首先显示专辑,然后 post
@foreach($posts as $p )
.....
@foreach($p->post->where('nama', 'like', "%$search%", 'or')->where('deskripsi', 'like', "%$search%") as $post)
....
@endforeach
@endforeach
但问题是它给了我所有的专辑,甚至是没有 post 的专辑。我的英语不是最好的,但我希望你能理解
将此添加到您的 Post 模型中:
$with = ['album'];
,它假设将相册模型添加到从数据库中检索到的每个 post。如果关系方法(在 Post 模型中)的名称与 album
不同,请相应地更改此数组。
然后只需使用此查询:
$posts = Post::where('nama', 'like', "%$search%")->orWhere('deskripsi', 'like', "%$search%")
->get();
然后像这样迭代:
@foreach($posts as $p)
{{ $p->album->title }}
@endforeach
如下更改您的查询:
$albums = album::whereHas('post', function($q) use ($search) {
$q->where('nama', 'like', '%'.$search.'%')
})
->orWhereHas('post', function($q) use ($search) {
$q->where('deskripsi', 'like', '%'.$search.'%')
})
->get();
你眼中的沙涅:
@foreach($albums as $album )
..... // display here album data
@foreach($album->post as $post)
.... // display here post data
@endforeach
@endforeach
编辑:
在您的相册模型中,为 post 定义新关系:
public function searchedPosts($search = null)
{
$posts = $this->hasMany('App\Post'); // your model path
if($search!=null){
$posts->where('nama', 'like', '%'.$search.'%')->orWhere('deskripsi', 'like', '%'.$search.'%');
}
return $posts;
}
如下更改您的查询:
$albums = album::with('post)->whereHas('post', function($q) use ($search) {
$q->where('nama', 'like', '%'.$search.'%')
})
->orWhereHas('post', function($q) use ($search) {
$q->where('deskripsi', 'like', '%'.$search.'%')
})
->get();
改变你的观点如下:
@foreach($albums as $album )
..... // display here album data
@foreach($album->searchedPosts($search)->get() as $post)
.... // display here post data
@endforeach
@endforeach
public function search(Request $request)
{
$query = $request->input('query');
$posts = Post::where('title','LIKE',"%$query%")
->approved()->publish()->get();
return view('FrontPage.search',compact('posts','query'));
}