我如何在laravel中编写此联接查询

时间:2018-08-14 23:40:56

标签: mysql laravel

SELECT text 
FROM localization 
LEFT JOIN countries 
ON countries.country_name_key = localization.key 
WHERE countries.country_name_key = localization.key
AND localization.lang = 'ar';

我需要用雄辩的模型在laravel中编写此查询,而模型之间没有关系。

2 个答案:

答案 0 :(得分:1)

我同意马洛先生。没有Eloquent,您必须使用查询生成器。但我认为,我有不同的查询:

$results = DB::table('localization')
         ->leftJoin('countries','countries.country_name_key','localization.key')
         ->where('countries.country_name_key','localization.key')
         ->where('localization.lang', 'ar')
         ->select('localization.text')
         ->get();

在查询中使用leftJoin时,将在本地化表中显示所有文本,尽管与国家/地区无关。因此,我认为不需要leftJoin来显示localization.text字段,因为您只想仅在本地化表中显示localization.text字段。

它在laravel 5.6中有效。

希望这会有所帮助。

答案 1 :(得分:0)

据我了解,Eloquent必须使用具有关系的模型才能有效地进行查询,因此就我(有限的)知识而言,我认为这是不可能的。

但是,Laravel确实附带了Query Builder,可以很好地解决此问题。

查询生成器

通过使用数据库外观(Illuminate\Support\Facades\DB),您可以像这样创建查询;

$results = DB::table('localization')
             ->join('countries', 'localization.key', '=', 'countries.country_name_key')
             ->where('countries.country_name_key', '=', 'localization.key')
             ->where('localization.lang', '=', 'ar')
             ->pluck('text');

用于解释/进一步研究的文档可以在Laravel 5.6 Query Builder Documentation

中找到

修改

如果您决定必须使用口才,可以使用reliese/laravel之类的东西为现有数据库表创建模型,但是随后您需要创建关系映射等。