Stare pytanie, już odpowiedział, wiem.
Jednak nikt nie wspomniał o klasie Expression.
To może nie rozwiązać twojego problemu, ponieważ twoje pytanie pozostawia niejednoznaczne pytanie, gdzie w SQL musi być zawarty warunek Raw (czy jest to w instrukcji SELECT czy w instrukcji WHERE?). Jednak ta informacja może okazać się przydatna, niezależnie od tego.
obejmują następujące klasy w pliku modelu:
use Illuminate\Database\Query\Expression;
Następnie wewnątrz klasy modelu zdefiniować nową zmienną
protected $select_cols = [
'id', 'name', 'foo', 'bar',
Expression ('(select count(1) from sub_table where sub_table.x = top_table.x) as my_raw_col'), 'blah'
]
i dodać zakres:
public function scopeMyFind ($builder, $id) {
return parent::find ($id, $this->select_cols);
}
Następnie z Twój kontroler lub plik logiczny, po prostu zadzwoń:
$rec = MyModel::myFind(1);
dd ($rec->id, $rec->blah, $rec->my_raw_col);
Szczęśliwe dni.
(Działa w Laravel ramach 5.5)
Spowoduje to zwrócenie wartości boolowskiej, jeśli instrukcja jest select, w klauzulach select użyj DB :: select, aby uzyskać tablicę wyników surowych. – Lucia
Powinieneś używać instrukcji DB :: tylko wtedy, gdy nie oczekujesz żadnych wyników zapytania. – Fusion