Модель фильтра, затем соедините со многими соотношениями -- laravel поле с участием filter поле с участием many-to-many поле с участием eloquent пол Связанный проблема

Filter model, then join with many-to-many relation


1
vote

проблема

русский

У меня есть две модели, <код> User и <код> Training . У них есть многозначные отношения с дополнительными поворотами, такими как <код> is_speaker и <код> is_creator . Я хочу:

  1. Получить все пользователи с указанным значением столбца, например: <код> SELECT * FROM users WHERE business_unit = Finance ;
  2. Получить связанный <код> training s где значение столбца с поворотом <код> is_speaker = true ;
Другими словами

Другими словами, посетитель поиск всех тренировок, чьи (первый) спикер принадлежит к указанному бизнес-единице.

Это то, что я пробовал до сих пор:

 <код> $bu_users = $this->user->where( 'business_unit', $business_unit )->get(); $speakerTrainings = $bu_users->trainings()->wherePivot( 'is_speaker', true )->get(); dd( $speakerTrainings ); // Returns: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pivot' in 'where clause' (SQL: select * from `trainings` where (select count(*) from `users` inner join `training_user` on `users`.`id` = `training_user`.`user_id` where `training_user`.`training_id` = `trainings`.`id` and `business_unit` = Finance and `users`.`is_active` = 1) >= 1 and `pivot` = is_speaker)   

.

 <код> $bu_trainings = $this->training->with( 'users' )     ->where( 'business_unit', '=', $business_unit )     ->wherePivot( 'is_speaker', true)     ->get(); dd( $bu_trainings ); // Returns: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'business_unit' in 'where clause' (SQL: select * from `trainings` where `business_unit` = Finance and `pivot` = is_speaker)   
Английский оригинал

I have two models, User and Training. They have many-to-many relationship with additional pivot fields like is_speaker and is_creator. I want to:

  1. Get all the users with specified column value, for example: SELECT * FROM users WHERE business_unit = Finance;
  2. Get the associated trainings where the pivot column value is is_speaker = true;

In other words, a visitor searches for all the trainings whose (first) speaker belongs to the specified business unit.

This is what I've tried so far:

$bu_users = $this->user->where( 'business_unit', $business_unit )->get(); $speakerTrainings = $bu_users->trainings()->wherePivot( 'is_speaker', true )->get(); dd( $speakerTrainings ); // Returns: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pivot' in 'where clause' (SQL: select * from `trainings` where (select count(*) from `users` inner join `training_user` on `users`.`id` = `training_user`.`user_id` where `training_user`.`training_id` = `trainings`.`id` and `business_unit` = Finance and `users`.`is_active` = 1) >= 1 and `pivot` = is_speaker) 

.

$bu_trainings = $this->training->with( 'users' )     ->where( 'business_unit', '=', $business_unit )     ->wherePivot( 'is_speaker', true)     ->get(); dd( $bu_trainings ); // Returns: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'business_unit' in 'where clause' (SQL: select * from `trainings` where `business_unit` = Finance and `pivot` = is_speaker) 
</div
           

Список ответов

1
 
vote
vote
Лучший ответ
 

Вы рядом. Теперь мы как-то нужно смешать два запроса у вас есть и добавить немного <код> whereHas

Попробуйте это (этот код возвращает всех пользователей, которые принадлежат к указанному бизнес-единице, а также являются докладчиками на любом тренировке):

 <код> $users = $this->user          ->whereHas('trainings', function($q){              $q->where('training_user.is_speaker', true);          })          ->where('business_unit', $business_unit)          ->get();   

Этот код вернет все тренинги, которые имеют хотя бы один динамик из указанного бизнес-устройства:

 <код> $trainings = $this->training->whereHas( 'users', function( $q ) {     $business_unit  = Input::get( 'bu' );     $q->where( 'training_user.is_speaker', true );     $q->where( 'business_unit', $business_unit ); })->get;   

Редактировать

Я знаю, что это не идеально, но это единственное, что я могу думать о том, что работает

Первый, для простоты использования, определите <код> speakers отношения

 <код> public function speakers(){     return $this->belongsToMany('User')->wherePivot('is_speaker', true); }   

Тогда сначала, стремится загрузка всех динамиков, фильтруйте тренинги впоследствии (отредактированные):

 <код> $business_unit = Input::get('bu'); $trainings = $this->training->has('speakers')->with('speakers')->get(); $trainings = $trainings->filter(function($training) use ($business_unit){     return $training->speakers->sortBy('training_user.id')->first()->business_unit == $business_unit; });   
 

You're close. Now we kind of need to mix the two queries you have and add a bit of whereHas

Try this (this code returns all the users who belong to the specified business unit and are also speakers on any training):

$users = $this->user          ->whereHas('trainings', function($q){              $q->where('training_user.is_speaker', true);          })          ->where('business_unit', $business_unit)          ->get(); 

This code will return all the trainings which have at least one speaker from the specified business unit:

$trainings = $this->training->whereHas( 'users', function( $q ) {     $business_unit  = Input::get( 'bu' );     $q->where( 'training_user.is_speaker', true );     $q->where( 'business_unit', $business_unit ); })->get; 

Edit

I know this isn't ideal but it's the only thing I can think of that works

First, for ease of use, define a speakers relation

public function speakers(){     return $this->belongsToMany('User')->wherePivot('is_speaker', true); } 

Then first, eager load all speakers, filter the trainings them afterwards (edited):

$business_unit = Input::get('bu'); $trainings = $this->training->has('speakers')->with('speakers')->get(); $trainings = $trainings->filter(function($training) use ($business_unit){     return $training->speakers->sortBy('training_user.id')->first()->business_unit == $business_unit; }); 
</div
 
 
         
         

Связанный проблема

0  Можно ли определить PrimaryKey во время выполнения для Laravel / eliquent?  ( Is it possible to define primarykey on runtime for laravel eloquent ) 
в красноречивом, я знаю, что можно определить таблицу во время выполнения с $ Model- & GT; Vestable (). Я пытался добавить новый элемент в конструкторе, как...

2  Laravel 5.2 Hasthrough  ( Laravel 5 2 hasthrough ) 
Так что я пытаюсь получить доступ к пользователям заметки по их аккаунтам. В основном Notes не принадлежат пользователю, они принадлежат к учетной записи, в к...

2  Прокси GOUTTE / DOXCE не работает  ( Goutte guzzle proxy doesnt work ) 
Я пытаюсь использовать gutte через прокси, но он проходит через исходный IP. Я не получаю никакой ошибки или что-то еще, и запросы идут хорошо, но хотя ориг...

0  Как я могу получить значение группы записей в группу столбца, используя с функцией в Laravel Eloquent ORM  ( How can i get count of records group by a column using with function in laravel ) 
Мне нужно получить количество записей <код> groupBy с использованием <код> with() функция, известная как adgerage loading. У меня есть две таблицы, имеющие ...

0  Форма Larave не обновляется и говорит, что ее еще одна форма Laravel 5,8  ( Laravel form doesnt update and says its another form laravel 5 8 ) 
Есть нить, где вы можете прокомментировать функции Создать комментариев, работает нормально, но когда я делаю запрос на обновление, он говорит, что ошибка: ...

0  Проблема при удалении файла: Laravel 5.4  ( Issue while deleting the file laravel 5 4 ) 
<код> $path = public_path(). '/Images/'; $this->MakeDirectory($path); $this->DeleteOldProfileImage($path. Auth::guard("api")->user()->ProfileImage); Когд...

0  Файл не загружается в Интернете (офлайн / локальные работы)  ( File not being uploaded online offline local works ) 
Чехол: Загрузка аватаров. Это работает в автономном режиме на моем localhost, но после того, как поместил его онлайн в 000webhost Provider, это больше не рабо...

3  Использование ввода :: все () при загрузке файлов в Laravel 4.2  ( Using inputall when uploading files in laravel 4 2 ) 
Согласно Это , если вы сделаете следующее <код> <?php // app/routes.php Route::get('/', function() { return View::make('form'); }); Route::post('han...

1  Hasmany, соблюдение, принадлежащие параметры с пользовательскими именами?  ( Hasmany belongsto belongstomany parameters with custom names ) 
У меня есть эти таблицы БД: <код> author (atr_id pk) // model : Author category (ctg_id pk) // model...

0  Что на самом деле модели в Laravel и где она используется?  ( What is actually model in laravel and where it is used ) 
Я не понимаю, что такое модель и красноречие. Я попробовал этот код <код> <?php class Nerd extends Eloquent { } Но все еще не получая то, ...

4  Неопределенная переменная $ петлей в лезвие Laravel  ( Undefined variable loop in laravel blade loop ) 
Согласно последней документации лезвия Laravel ( https://laravel.com/docs/5.3/blade / a> Смотрите «петли») Я могу «[...] использовать переменную петли, чтобы ...

0  Доступ к загруженному файлу на Frestend с laravel  ( Accessing uploaded file on frontend with laravel ) 
Я загрузку и хранилюсь. В мой <сильный> blade.php у меня есть эта строка: <код> <img src="{{ storage_path('app\'. $image) }}" /> Эта строка генерирует ...

1  Как использовать коллектив в Laravel5.3  ( How to use collective in laravel5 3 ) 
Я обновил от L4.2 до 15.3.20, и я пытался использовать с Collace-Laravel FormFacades и HTMLFACADE с подземным кодом, но я получил ошибки приводит к моим выпад...

0  Композитор застрял на `Что-то изменилось, снова смотрел на все правила` Во время обновления laravel до 5,6  ( Composer stuck on somethings changed looking at all rules again while updati ) 
Я пытаюсь обновить мою приложение Laravel. Я был в 5.2, а теперь я в 5,5. Все работает нормально до здесь. Теперь я изменил его на <код> 5.6.* в моем файле...

0  Как удалить все обзор новостей, когда новости удаляются из БД?  ( How to delete all review of a news when news is deleted from db ) 
У меня есть две модели <код> News и <код> Review Это <код> News модель <код> <?php namespace ModulesNewsletterEntities; use BrexisLaravelWorkflowTraits...

Связанный проблема

0  Можно ли определить PrimaryKey во время выполнения для Laravel / eliquent? 
2  Laravel 5.2 Hasthrough 
2  Прокси GOUTTE / DOXCE не работает 
0  Как я могу получить значение группы записей в группу столбца, используя с функцией в Laravel Eloquent ORM 
0  Форма Larave не обновляется и говорит, что ее еще одна форма Laravel 5,8 
0  Проблема при удалении файла: Laravel 5.4 
0  Файл не загружается в Интернете (офлайн / локальные работы) 
3  Использование ввода :: все () при загрузке файлов в Laravel 4.2 
1  Hasmany, соблюдение, принадлежащие параметры с пользовательскими именами? 
0  Что на самом деле модели в Laravel и где она используется? 
4  Неопределенная переменная $ петлей в лезвие Laravel 
0  Доступ к загруженному файлу на Frestend с laravel 
1  Как использовать коллектив в Laravel5.3 
0  Композитор застрял на `Что-то изменилось, снова смотрел на все правила` Во время обновления laravel до 5,6 
0  Как удалить все обзор новостей, когда новости удаляются из БД?