如果我正确地理解了您的意思,那么如果已经存在使用相同语言和标题的首选语言的行,则希望使用后备语言“删除”这些行.
您可以使用LEFT JOIN作为后备语言来检查是否存在使用首选语言的条目.例如,如果您的首选语言是“ nl”,后备语言是“ en”,则查询可能类似于:
select blocks.*
from blocks
left join blocks b1
on b1.slug = blocks.slug
and b1.title = blocks.title
and b1.language = 'nl'
and blocks.language <> 'nl'
where blocks.slug = 'home'
and blocks.language in ('nl', 'en')
and b1.id is null
单词中的连接可能有点像:为相同的子句和标题寻找更好的翻译.如果语言是首选语言,则由于blocks.language<>而不会匹配. ‘NL’.否则,联接将“搜索”所需的翻译(‘b1.language =’nl’).
在WHERE子句中,如果没有找到更好的转换(b1.id为null),则仅告诉我们返回行.
我能做的最好的将查询转换为雄辩的是:
$prefered = 'nl';
$fallback = 'en';
$blocks = App\Block::where('blocks.slug', '=', 'home')
->whereIn('blocks.