Mysql / Laravel: искать ключевые слова по нескольким языкам, но получать только результаты текущего языка - PullRequest
1 голос
/ 25 февраля 2020

таблица "language"

id | name    | code
-------------------
1  | English | en
2  | German  | de

таблица "article"

id | is_active
--------------
1  | 1
2  | 1

таблица "article_translation"

article_id | language_id | title
-------------------------------------------
1          | 1           | foo
1          | 2           | title1 in German
2          | 1           | title2 in English
2          | 2           | foo

Предположим, я ищу "foo" с похожим условием, и я хочу получить результаты с language_id = 1, но все равно нужно искать заголовок на других языках. Следующие результаты, как я и ожидал:

article_id | language_id | title
-------------------------------------------
1          | 1           | foo
2          | 1           | title2 in English

В laravel я пытался использовать группирование по функциям, но результаты не могут гарантировать, что language_id равен 1. Также необходимо установить строгий режим на false.

\App\ArticleTranslation::where('title', 'like', '%foo%')->groupBy('article_id')->paginate(10);

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Добавить отношения для простых запросов

// Language model
public function articles()
{
    return $this->belongsToMany(Article::class);
}

// Article model
public function languages()
{
    return $this->belongsToMany(Language::class);
}

// in controller
$articles = Language::find(1)->articles()->wherePivot('title', 'like', '%foo%')->get();
foreach($articles as $article){
    dump($article); // $title = $article->pivot->title
}
0 голосов
/ 25 февраля 2020
SELECT at1.*
FROM article_translation at1
JOIN article_translation at2 ON at1.article_id = at2.article_id 
WHERE at2.title = @title
  AND at1.language_id = @language_id 

скрипка

PS. Конвертировать в Laravel самостоятельно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...