#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