Ich arbeite an Laravel 4. Als ich wusste, anpassen, ich subquery tun können:Wie Laravel der Datenbank query Builder (besser machen subquery)
Project::whereIn('project_id', function($q) {
$q->select('project_id')
->from('company')
->whereNull('deleted_at');
});
ich Komplikationen festgestellt, dass ich kann‘ t Verwenden Sie den Bereich in der Unterabfrage und deaktivieren Sie soft_delete, damit ich den Quellcode so oft ändere.
Ich wünschte, es war:
Project::whereIn('project_id', function(&$q) {
$q = Company::select('project_id')->getQuery();
});
Nun, ich Umfang hinzufügen, deaktivieren leicht soft_delete.
Ich habe versucht, und fand eine Lösung, dass ich Laravel der Datenbank \ query \ Builder Code, Funktion whereInSub, Linie 786.
call_user_func($callback, $query = $this->newQuery());
sich ändern muss:
$query = $this->newQuery();
call_user_func_array($callback, array(&$query));
Es ist schädlich zu ändern Laravel-Framework-Anbieter. Also möchte ich fragen, wie man es sicher macht.
Sorry, weil mein schlechtes Englisch.
Vielen Dank für das Lesen.
Ich habe meine Frage editiert, weil ich eine Lösung gefunden habe. Notwendigkeit, die geschützte Funktion newBaseQueryBuilder() in der neuen Klasse MyModel zu überschreiben –
Sie müssen keine "Verwendungs" -Listen hinzufügen, es sei denn, Sie verwenden sie tatsächlich in Ihrer Unterklasse. In diesem Fall benötigen Sie nur Ihren MyQueryBuilder, der in der überschriebenen Version von newBaseQueryBuilder() als @ LêTrầnTiếnTrung genau angegeben würde. – LePhleg