Cakephp 4 использование множественного поиска с условиями

#join #cakephp #lookup-tables #cakephp-4.x

#Присоединиться #какашка #таблицы поиска #cakephp-4.x

Вопрос:

Доброе утро. Я пытаюсь воссоздать простой сайт для отслеживания статей о неисправностях транспортных средств, которые я создал 7 лет назад. Сейчас я пытаюсь создать его с помощью cakephp 4, и большая часть моего старого кода не работает. Так что теперь я пытаюсь построить его с нуля.

Я случайно застрял на своей странице поиска, чтобы просмотреть созданные мной статьи. Каждая статья имеет несколько тегов , несколько транспортных средств и несколько симптомов.

У меня есть 4 таблицы: Article , vehicle , symptoms , и tags .

В vehicle , symptoms и tags есть таблицы поиска, соединяющие их с Articles : articles_vehicles , articles_symptoms и articles_tags .

Они настраиваются с помощью модели статьи, BelongsToMany и я могу получить

Я пытаюсь создать страницу поиска, чтобы я мог искать статью по автомобилю, тегу или симптому. Я могу заставить это работать при поиске только одного из них, но не могу понять, как это сделать, когда у меня есть более одного из условий, которые я ищу, т. Е. транспортное средство И метка. Мой поиск в настоящее время больше похож на автомобиль ИЛИ метку.

Это то, что настроено в моей Articles модели:

 $this-gt;belongsToMany('Tags', [  'joinTable' =gt; 'articles_tags',  'dependent' =gt; true ]); $this-gt;belongsToMany('Symptoms', [  'joinTable' =gt; 'articles_symptoms',  'dependent' =gt; true ]); $this-gt;belongsToMany('Vehicles', [  'joinTable' =gt; 'articles_vehicles',  'dependent' =gt; true ]);  

И я делаю это в своем Articles контроллере:

 $vehicleSQL = array(  'table' =gt; '(  SELECT  *  FROM  vehicles  LEFT JOIN  articles_vehicles ON articles_vehicles.vehicle_id = vehicles.id  )',  'alias' =gt; 'c',  'type' =gt; 'inner',  'conditions' =gt; array(  'c.article_id = Articles.id',  'c.vehicle_id' =gt; $vehicle  ) );  
 $tagSQL = array(  'table' =gt; '(  SELECT  *  FROM  tags  LEFT JOIN  articles_tags ON articles_tags.tag_id = tags.id  )',  'alias' =gt; 't',  'type' =gt; 'inner',  'conditions' =gt; array(  't.article_id = Articles.id',  't.title' =gt; $tag,  ), );  
 $option['joins'] = array($vehicleSQL, $tagSQL); $test = $this-gt;Articles-find('all',$option);  

Setting $tag or $vehicle will get me results but its like the search is done on each join table and not done as a whole on both tables, ie i end up with results of a search that include all articles that have one or the other values in it and not a results that just have both values in it.

Can anyone offer any advice to make my search work.

Заранее извините, если это вообще не имеет смысла. Я не программист, и это просто то, что я пытаюсь сделать, чтобы облегчить свою жизнь на работе. Спасибо вам за любую помощь

спасибо, что уделили мне время

J