Alte Frage durch das Schreiben verkürzen können, bereits beantwortet, ich weiß.
Allerdings scheint niemand die Ausdrucksklasse zu erwähnen.
Zugegeben, das behebt möglicherweise Ihr Problem nicht, da Ihre Frage nicht eindeutig ist, wo in der SQL die Raw-Bedingung enthalten sein muss (in der SELECT-Anweisung oder in der WHERE-Anweisung?). Diese Information könnte Sie jedoch unabhängig davon nützlich finden.
Fügen Sie die folgende Klasse in Ihrer Modelldatei:
use Illuminate\Database\Query\Expression;
in der Modellklasse Dann
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'
]
eine neue Variable definieren und einen Rahmen hinzufügen:
public function scopeMyFind ($builder, $id) {
return parent::find ($id, $this->select_cols);
}
Dann aus Ihre Steuerung oder Logic-Datei rufen Sie einfach an:
$rec = MyModel::myFind(1);
dd ($rec->id, $rec->blah, $rec->my_raw_col);
Glückliche Tage.
(Funktioniert in Laravel Framework 5.5)
Dies wird einen booleschen Wert zurückgeben, wenn die Anweisung ein select ist, für select -Klauseln verwenden Sie DB :: select, um ein Array von unformatierten Ergebnissen zu erhalten. – Lucia
Sie sollten DB :: Anweisung nur verwenden, wenn Sie keine Ausgabe der Abfrage erwarten. – Fusion