【问题标题】:Laravel 8 - how to fetch data from the database using an object as a "where" condition?Laravel 8 - 如何使用对象作为“where”条件从数据库中获取数据?
【发布时间】:2022-01-27 12:15:24
【问题描述】:

我是 laravel 编程的新手,我正在尝试用 laravel Eloquent 做一些事情。

所以我有 3 个表,dev、dev_project(多对多)和项目。

  • 我需要使用 dev_project 表查看开发人员属于哪些项目,并从项目中获取相应的 ID。
  • 之后,我需要转到表项目,并使用我从多对多表中获得的 id 来获取同一个开发人员所属的项目的相应名称。

首先我从我的数据库中获取数据到一个变量中

$devproject = DB::table('dev_project')->where('id_dev', '=', Auth::user()->id)->get();

然后我试图从项目表中获取数据,其中 id 与我之前获取的相同

return Project::where('id', $dev_project->id_project);

这里的问题是变量 dev_project 是一个对象,我不能使用 foreach 并将我想要返回的数据存储在一个数组中。

那么我怎样才能在同一个对象中获取我想要的所有数据。

感谢您的帮助,谢谢。

【问题讨论】:

标签: php laravel eloquent


【解决方案1】:

这里,$devproject 是一个集合,而不是单行。 $dev_project->id_project 不是有效属性。

  • 如果你想要第一个结果是id_project,那么语法是$devproject->first()->id_project
  • 如果您想要每个 $devprojectid_project 的集合,则语法应为 $devproject->pluck('id_project')

考虑到这一点,您的查询应该是

return Project::where('id', $dev_project->first()->id_project);

return Project::whereIn('id', $dev_project->pluck('id_project'));

正如 harish durga 所建议的那样,建立关系可以让您省去编写这些查询的麻烦。

# Dev Model

public function projects()
{
    return $this->belongsToMany(Project::class, 'dev_project', 'id_project', 'id_dev');
}
# Project Model

public function devs()
{
    return $this->belongsToMany(Dev::class, 'dev_project', 'id_dev', 'id_project');
}
# Get all devs with associated projects:
$devs = Dev::with('projects')->get();

foreach ($devs as $dev) {
    echo $dev->...
    foreach ($dev->projects as $project) {
        echo $project->...
    }
}

【讨论】:

  • 我把这段代码放在哪里? $devs = Dev::with('projects')->get(); foreach ($devs as $dev) { echo $dev->... foreach ($dev->projects as $project) { echo $project->... } }
  • 这是一个例子
  • 我尝试使用查询,但是当我使用此return Project::whereIn('id', $devproject->pluck('id_project')); 时,我收到此错误Argument 1 passed to Symfony\Component\HttpFoundation\Response::setContent() must be of the type string or null, object given, called in C:\xampp\htdocs\check_listsv2\vendor\laravel\framework\src\Illuminate\Http\Response.php on line 72
  • return json_encode(Project::......);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 2021-11-11
相关资源
最近更新 更多