在 laravel 中搜索相关数据
searching related data in laravel
我想使用 laravel 中的关系为特定用户搜索项目
但出于某种原因,它给了我所有用户的所有项目的错误响应。我尝试了很多解决方案但没有解决方案所以有帮助吗?
这个 Projet.php:
public function users()
{
return $this->belongsToMany('App\User')->using('App\ProjetUser')->withPivot([
'user_id',
'projet_id',
]);
这个User.php:
public function projets(){
return $this->belongsToMany('App\Projet')->using('App\ProjetUser');
}
这是搜索功能:
if($search = \Request::get('s')){
$projets=Projet::with('users')->
where(function($query) use ($search){
$query->where('name','LIKE',"%$search%")->Orwhere('owner','LIKE',"%$search%")->Orwhere('duration','LIKE',"%$search%")
->Orwhere('budget','LIKE',"%$search%");
})->get();
}
return response()->json([
"projets"=>$projets
]);
}
试试这个
if($search = \Request::get('s')){
$projets=Projet::with(['users' => function($query) use ($search){
$query->where('name','LIKE',"%$search%")
->orWhere('owner','LIKE',"%$search%")
->orWhere('duration','LIKE',"%$search%")
->orWhere('budget','LIKE',"%$search%");
}])->get();
}
return response()->json(["projets"=>$projets]);
}
我觉得应该是orWhere
,不是Orwhere
。
像这样:
$projets = Projet::where(function($query) use ($search) {
$query->where('name', 'LIKE', '%' . $search . '%')
->orWhere('owner', 'LIKE', '%' . $search . '%')
->orWhere('duration', 'LIKE', '%' . $search . '%')
->orWhere('budget', 'LIKE', '%' . $search . '%');
})
->with('users')
->get();
如果你只想在与当前登录用户相关的项目中搜索,你可以这样做:
$projets = Projet::where(function($q) use ($search) {
$q->where('name', 'LIKE', '%' . $search . '%')
->orWhere('owner', 'LIKE', '%' . $search . '%')
->orWhere('duration', 'LIKE', '%' . $search . '%')
->orWhere('budget', 'LIKE', '%' . $search . '%');
})
->whereHas('users', function($q) {
$q->where('id', auth()->user()->id);
})
->with('users', function($q) {
$q->where('id', auth()->user()->id);
})
->get();
但是,这样有点令人困惑。我会反过来,从用户开始,然后逐步进行项目,就像这样:
if (!auth()->check()) {
die('not logged in?');
}
// Get user obj
$user = User::find(auth()->user()->id);
// Get search input
$search = \Request::get('s');
// Eloquent find projects
$projets = $user->projets();
// Search has a value
if (is_string($search) && strlen($search) > 0) {
// Search in users project
$projets = $projects->where(function($q) use($search) {
$q->where('name', 'LIKE', '%' . $search . '%')
->orWhere('owner', 'LIKE', '%' . $search . '%')
->orWhere('duration', 'LIKE', '%' . $search . '%')
->orWhere('budget', 'LIKE', '%' . $search . '%');
});
}
$projects = $projects->get();
return response()->json([
"projets" => $projets
]);
试试这个:
if($search = \Request::get('s')){
$projets=Projet::whereHas('users', function ($query) {
$query->where('users.id', auth()->user()->id);
})
->where(function($query) use ($search){
$query->where('name','LIKE',"%$search%")->orWhere('owner','LIKE',"%$search%")->orWhere('duration','LIKE',"%$search%")
->orWhere('budget','LIKE',"%$search%");
})->get();
}
return response()->json([
"projets"=>$projets
]);
}
我想使用 laravel 中的关系为特定用户搜索项目 但出于某种原因,它给了我所有用户的所有项目的错误响应。我尝试了很多解决方案但没有解决方案所以有帮助吗? 这个 Projet.php:
public function users()
{
return $this->belongsToMany('App\User')->using('App\ProjetUser')->withPivot([
'user_id',
'projet_id',
]);
这个User.php:
public function projets(){
return $this->belongsToMany('App\Projet')->using('App\ProjetUser');
}
这是搜索功能:
if($search = \Request::get('s')){
$projets=Projet::with('users')->
where(function($query) use ($search){
$query->where('name','LIKE',"%$search%")->Orwhere('owner','LIKE',"%$search%")->Orwhere('duration','LIKE',"%$search%")
->Orwhere('budget','LIKE',"%$search%");
})->get();
}
return response()->json([
"projets"=>$projets
]);
}
试试这个
if($search = \Request::get('s')){
$projets=Projet::with(['users' => function($query) use ($search){
$query->where('name','LIKE',"%$search%")
->orWhere('owner','LIKE',"%$search%")
->orWhere('duration','LIKE',"%$search%")
->orWhere('budget','LIKE',"%$search%");
}])->get();
}
return response()->json(["projets"=>$projets]);
}
我觉得应该是orWhere
,不是Orwhere
。
像这样:
$projets = Projet::where(function($query) use ($search) {
$query->where('name', 'LIKE', '%' . $search . '%')
->orWhere('owner', 'LIKE', '%' . $search . '%')
->orWhere('duration', 'LIKE', '%' . $search . '%')
->orWhere('budget', 'LIKE', '%' . $search . '%');
})
->with('users')
->get();
如果你只想在与当前登录用户相关的项目中搜索,你可以这样做:
$projets = Projet::where(function($q) use ($search) {
$q->where('name', 'LIKE', '%' . $search . '%')
->orWhere('owner', 'LIKE', '%' . $search . '%')
->orWhere('duration', 'LIKE', '%' . $search . '%')
->orWhere('budget', 'LIKE', '%' . $search . '%');
})
->whereHas('users', function($q) {
$q->where('id', auth()->user()->id);
})
->with('users', function($q) {
$q->where('id', auth()->user()->id);
})
->get();
但是,这样有点令人困惑。我会反过来,从用户开始,然后逐步进行项目,就像这样:
if (!auth()->check()) {
die('not logged in?');
}
// Get user obj
$user = User::find(auth()->user()->id);
// Get search input
$search = \Request::get('s');
// Eloquent find projects
$projets = $user->projets();
// Search has a value
if (is_string($search) && strlen($search) > 0) {
// Search in users project
$projets = $projects->where(function($q) use($search) {
$q->where('name', 'LIKE', '%' . $search . '%')
->orWhere('owner', 'LIKE', '%' . $search . '%')
->orWhere('duration', 'LIKE', '%' . $search . '%')
->orWhere('budget', 'LIKE', '%' . $search . '%');
});
}
$projects = $projects->get();
return response()->json([
"projets" => $projets
]);
试试这个:
if($search = \Request::get('s')){
$projets=Projet::whereHas('users', function ($query) {
$query->where('users.id', auth()->user()->id);
})
->where(function($query) use ($search){
$query->where('name','LIKE',"%$search%")->orWhere('owner','LIKE',"%$search%")->orWhere('duration','LIKE',"%$search%")
->orWhere('budget','LIKE',"%$search%");
})->get();
}
return response()->json([
"projets"=>$projets
]);
}