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中编写此查询,而模型之间没有关系。
答案 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之类的东西为现有数据库表创建模型,但是随后您需要创建关系映射等。