【问题标题】:laravel eloquent get table 1 based on search of table 2laravel eloquent 根据对表 2 的搜索获取表 1
【发布时间】:2016-06-07 05:27:16
【问题描述】:

已修复

所以在对这个问题进行了多次回复之后,我终于想出了我真正的问题并得到了回答,但这仍然让我想知道为什么 eloquent 无法处理

A->B->C

给定 A 的对象基于 C 中的值访问所有 B 项(名称=脚本)

下面的解决方案有效,因为 laravel 有范围可以保持干净,但我觉得应该有一个更简单、更快的解决方案。

public function scopeType($query, $type)
    {

        return $query->join('article_image_types', 'article_image_types.id', '=', 'article_images.article_image_type_id')->where('name', $type);
    }

如果您有两个表 image 和 image_type 并且我想查找具有特定类型的所有图像,那在 eloquent 中会是什么样子?

假设你有一种类型为“1”的“脚本”,我知道我可以从图像集合中完成

where('image_type_id', '1')

但是我该怎么做才能使下面的工作正常

where('name', 'script')

目标:

我希望能够从刀片文件中轻松访问这些数据,因此使用范围如下所示

<input type="text" name="['image']['script']" value="{!! $article->articleimage()->type('script') !!}">

甚至可以通过表单模型绑定['image']['script']更好地根据类型访问图像

所以这行得通

foreach($article->articleImages->all() as $item) {
            dd($item->articleimagetype->name);
        }

并将返回“脚本”

但是如何只得到一个说“脚本”的人

::更新::

所以我设置了范围,但正如我所料,我试图根据辅助表名称来解决这个问题

$query->where('name', $type);

如果我愿意,你的解决方案会起作用

$query->where('image_type_id', 1);

SQLSTATE[42S22]:未找到列:1054 中的未知列“名称” 'where 子句' (SQL: select * from article_images where article_images.article_id = 32 和 article_images.article_id 不为空且name = 脚本)

更新

因此,执行以下操作会产生我想要的结果,除非我没有取回类型名称,而且我似乎无法用 has('articleimagetype') 或 has('articleimages.articleimagetype') 取回它

$article->articleImages()->whereHas('articleimagetype', function($query){
            $query->where('name', 'script');
        })->has('articleimagetype')->get();

【问题讨论】:

  • 我在这里没有看到问题
  • 我不能让它只返回图像类型名称为“脚本”的那个,它会返回所有三个,但对于没有脚本的那些,它会给出一个 null 类型我运行我刚刚添加的脚本。

标签: laravel-5 eloquent


【解决方案1】:

只需使用连接:

\DB::table('image')
   ->join('image_type','image_type.id','=', 'image.image_type_id')
   ->where('image_type.name','=','script')
   ->get();

编辑:

在您的目标更新后,我看到了您想要什么。 Laravel 有一个名为 query scope 的功能,可以让您轻松地以您尝试的方式找到数据。

在您的 Articleimage 模型中,创建一个范围:

public function scopeType($query, $type)
{
    return $query->join('article_image_type','article_image_type.id','article_image.type_id')
                 ->where('type', $type);
}

那你就可以$article-&gt;articleimage()-&gt;type('script')了。

【讨论】:

  • 我为此添加了一个目标,请参见上文
  • 这里的语句只会获取image_type = 'script'的图片。试试看。如果您的结果不同,我们需要在这里提供更多信息,因为您的问题可能与您的查询不同。
  • 问题是我不了解 eloquent 的基础知识以及基于与之关联的类型值访问图像数据。您想要什么信息,我会提供。
  • 已更新。看看吧。
  • 好的,这就是我的想法,但我还没有添加更新的内容。
猜你喜欢
  • 2015-02-02
  • 1970-01-01
  • 2020-07-28
  • 2017-11-20
  • 2020-11-06
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
相关资源
最近更新 更多