Хотя я подозреваю, что выбор phone_id
в качестве id
мог повлиять на запрос при проверке взаимосвязи, но быстрая отладка могла бы удалить его из связанной функции:
->select('id as phone_id','contact_number as phone','contact_number','country_code','type','dial_code')
->where('meta_key','customer');
И позволитьфункция phones
быть просто,
public function phones(){
return $this->hasMany('App\Phone','meta_value', 'id');
}
~ ОБНОВЛЕНО ~
Затем вам нужно , чтобы использовать load
вместо.
Если вам необходимо выполнить дополнительную проверку позже для отношения, затем передайте обратный вызов для его фильтрации:
$customer = Customer::find('448')->load(['phones' => function($query) {
$query->where('meta_key','customer');
}]);
Или:
$customer = Customer::with(['phones' => function($query) {
$query->where('meta_key','customer');
}])->find('448');
Исходная проблема:
Использование with
и get
в результате find
создает еще один экземпляр модели для нового запроса, следовательно, вы получите только все записи о клиентах.Вы можете использовать метод load
, или если вы будете использовать with
, тогда вам придется установить фильтр в конце функций запроса.
Для лучшего понимания, пожалуйста, отметьте Laravelдокументация по быстрой загрузке