【发布时间】:2014-11-04 15:34:46
【问题描述】:
嗨,我很困惑我应该如何编写雄辩的查询要获取项目所属的相关客户,这是在projects 和tasks 表client_id 理想情况下我想访问此页面app.dev/project/3/tasks 这样很简单,可以路由到:
Route::any("project/{resource}/tasks", [
"as" => "project/projectrelatedtasks",
"uses" => "ProjectController@projectrelatedtasks"
]);
我不确定编写此查询的最简单方法是什么,我可以轻松地在下面批量获取所需的内容,就像在我的存储库中一样:
public function getProjectTasks() {
//This fetches the auth users projects, the client to who it belongs and its related tasks
//not sure how to insert another find with $id
return \User::with(array('projects', 'projects.clients',
'projects.tasks'))->find(Auth::user()->id);
}
这在我的控制器中:
public function projectrelatedtasks() {
$projects = $this->project->getProjectTasks();
return $projects;
}
但我想通过它的 id 将其限制为一个项目,不确定执行此查询的最佳和最有效的方法是什么,有人可以帮我解决这个问题吗?谢谢
编辑
存储库:
public function getProjectTasks($id) {
return \Projects::with(['clients', 'tasks'])
->whereUserId(Auth::user()->id)
->find($project_id);
}
路线:
Route::any("project/{resource}/tasks", [
"as" => "project/projectrelatedtasks",
"uses" => "ProjectController@projectrelatedtasks"
]);
控制器:
public function projectrelatedtasks($id)
{
// get the Project tasks
$project = $this->project->getProjectTasks($id);
return $project;
}
错误日志:
[2014-09-10 20:56:50] production.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in /media/sf_Sites/tempus/bootstrap/compiled.php:5687
Stack trace:
#0 /media/sf_Sites/tempus/bootstrap/compiled.php(5004): Illuminate\Routing\RouteCollection->match(Object(Illuminate\Http\Request))
#1 /media/sf_Sites/tempus/bootstrap/compiled.php(4992): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#2 /media/sf_Sites/tempus/bootstrap/compiled.php(4984): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#3 /media/sf_Sites/tempus/bootstrap/compiled.php(717): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#4 /media/sf_Sites/tempus/bootstrap/compiled.php(698): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#5 /media/sf_Sites/tempus/bootstrap/compiled.php(7706): Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1, true)
#6 /media/sf_Sites/tempus/bootstrap/compiled.php(8309): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1, true)
#7 /media/sf_Sites/tempus/bootstrap/compiled.php(8256): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, true)
#8 /media/sf_Sites/tempus/bootstrap/compiled.php(10895): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, true)
#9 /media/sf_Sites/tempus/bootstrap/compiled.php(659): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request))
#10 /media/sf_Sites/tempus/public/index.php(49): Illuminate\Foundation\Application->run()
#11 {main} [] []
错误日志 2
[2014-09-10 21:01:58] production.ERROR: exception 'ErrorException' with message 'Undefined variable: project_id' in /media/sf_Sites/tempus/app/Acme/Repositories/DbProjectRepository.php:64
Stack trace:
#0 /media/sf_Sites/tempus/app/Acme/Repositories/DbProjectRepository.php(64): Illuminate\Exception\Handler->handleError(8, 'Undefined varia...', '/media/sf_Sites...', 64, Array)
#1 /media/sf_Sites/tempus/app/controllers/ProjectController.php(40): Acme\Repositories\DbProjectRepository->getProjectTasks('55')
#2 [internal function]: ProjectController->projectrelatedtasks('55')
#3 /media/sf_Sites/tempus/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(231): call_user_func_array(Array, Array)
#4 /media/sf_Sites/tempus/bootstrap/compiled.php(5784): Illuminate\Routing\Controller->callAction('projectrelatedt...', Array)
#5 /media/sf_Sites/tempus/bootstrap/compiled.php(5772): Illuminate\Routing\ControllerDispatcher->call(Object(ProjectController), Object(Illuminate\Routing\Route), 'projectrelatedt...')
#6 /media/sf_Sites/tempus/bootstrap/compiled.php(4971): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request), 'ProjectControll...', 'projectrelatedt...')
#7 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}('55')
#8 /media/sf_Sites/tempus/bootstrap/compiled.php(5330): call_user_func_array(Object(Closure), Array)
#9 /media/sf_Sites/tempus/bootstrap/compiled.php(4996): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#10 /media/sf_Sites/tempus/bootstrap/compiled.php(4984): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#11 /media/sf_Sites/tempus/bootstrap/compiled.php(717): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#12 /media/sf_Sites/tempus/bootstrap/compiled.php(698): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#13 /media/sf_Sites/tempus/bootstrap/compiled.php(7706): Illuminate\Foundation\Application->handle(Object(Illuminate\Http\Request), 1, true)
#14 /media/sf_Sites/tempus/bootstrap/compiled.php(8309): Illuminate\Session\Middleware->handle(Object(Illuminate\Http\Request), 1, true)
#15 /media/sf_Sites/tempus/bootstrap/compiled.php(8256): Illuminate\Cookie\Queue->handle(Object(Illuminate\Http\Request), 1, true)
#16 /media/sf_Sites/tempus/bootstrap/compiled.php(10895): Illuminate\Cookie\Guard->handle(Object(Illuminate\Http\Request), 1, true)
#17 /media/sf_Sites/tempus/bootstrap/compiled.php(659): Stack\StackedHttpKernel->handle(Object(Illuminate\Http\Request))
#18 /media/sf_Sites/tempus/public/index.php(49): Illuminate\Foundation\Application->run()
#19 {main} [] []
【问题讨论】:
-
所以你想通过它的
id获取一个项目,前提是它属于user? -
是的,但我也想检索它的相关客户端,以便将其输出到前端@Kousha
-
好的,请稍等。我正在写解决方案
-
其实有个问题:你为什么从
User开始?为什么不直接从Project开始呢?应该有一个数据透视表或已经将User链接到Project的东西 -
@Kousha 是的,我在项目表中有一个 user_id,所以我想我可以从项目开始,但是我将如何查询两个 id,这就是我真正困惑的地方
标签: laravel eloquent has-many belongs-to relationships