laravel eloquent根据表2的搜索得到表1

时间:2016-06-06 19:24:02

标签: laravel-5 eloquent

固定

因此,经过对这个问题的多次回答,我终于得到了我的真实问题的思考和回答,但它仍然让我想知道为什么雄辩不能处理

的问题

A-> B-> C

给定A的对象基于C(name = script)

中的值访问所有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中会是什么样子?

假设您有一种ID为“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);
        }

并将返回“script”

但是怎么只得到那个说“脚本”的人

:: UPDATE ::

所以我设置了范围,但正如我所预期的那样,我试图根据辅助表名称这样做

$query->where('name', $type);
如果我想做

,你的解决方案就可以了
$query->where('image_type_id', 1);
  

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

更新

所以做下面的事情会产生我想要的东西除了我没有得到一个类型名称,我似乎无法用has('articleimagetype')或者有('articleimages.articleimagetype')

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

1 个答案:

答案 0 :(得分:1)

只需使用join:

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

编辑:

在你的GOAL更新后,我看到了你想要的东西。 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->articleimage()->type('script')