Laravel Красноречивая модель получения с двойным отношением принадлежности

#laravel #eloquent #laravel-7 #eloquent-relationship

#laravel #красноречивый #laravel-7 #eloquent-relationship

Вопрос:

У меня есть модель для подписки с отношением принадлежности к двум другим моделям, PhoneNumber и ToGoDevice.

Как номер телефона, так и общее устройство имеют много общих подписок.

У меня есть номер телефона и общее устройство, что мне нужно сделать, это получить общую подписку, которая принадлежит данному номеру телефона и общему устройству. Это всегда должна быть одна запись, если все работает нормально.

Изображение отношений

Это соответствующие столбцы, которые у меня есть в каждой таблице:

таблица телефонных номеров:

 id
name            
number          
description
  

to_go_devices таблица:

 id
name            
mac         
IP
  

в таблицу подписк:

 id
phone_number_id         
to_go_subscription_type_id      
to_go_device_id     
expiry_date
  

До сих пор я пробовал эти 2 фрагмента, но результаты, которые я получаю, нежелательны.

 ToGoSubscription::where('phone_number_id', $phoneDetails->id)->with(['toGoDevice' => function($q){
        $q->where('to_do_devices.id', '=',  $deviceId);
    }])->get();
  

и

  $phoneDetails->toGoSubscription($deviceDetails->id)->get();
  

Все, что мне нужно, это получить одну подписку, которая относится к номеру телефона $ и к имеющемуся у меня mac $. Я могу получить данные $ phoneDetails из таблицы phone_numbers и данные $deviceDetails, используя $mac из таблицы to_go_devices.

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

Комментарии:

1. почему бы просто не: для подписки:: where(‘phone_number_id’, $phoneDetails-> id)->where(‘to_go_device_id’, $DeviceID) ->get();

2. Спасибо @OMR, я не знал, что могу связать 2 где. Как свалка меня!

3. приветствую вас, я сделаю свой комментарий в качестве ответа, чтобы мы могли считать этот вопрос решенным

Ответ №1:

вы можете использовать цепочку, где:

 $value= ToGoSubscription:: where('phone_number_id', $phoneDetails->id)->where('to_go_device_id', $deviceId) ->get();