2016-12-27 4 views
1

In SQL es ziemlich trivial ist so etwas wie das zu tun folgende:Laravel: Mathematik in WHERE-Klausel

SELECT * FROM properties WHERE (price/acres) = 3000; 

Diese jede Eigenschaft wählen würde, wo der "Preis pro Acre" ist 3000

ich tun will das in Laravel. Ich habe versucht, die folgenden:

Property::where('price/acres', 3000)->get(); 

jedoch diese auf den Spaltentitel in Backticks eingewickelt, die folgende SQL-Erstellung:

select * from `properties` where `price/acres` = 3000 

Dies scheiterte (natürlich) mit dem Fehler: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'price/acres' in 'where clause'

Antwort

6

können Sie verwenden whereRaw gefällt das:

Property::whereRaw('(price/acres) = 3000')->get(); 
+0

ah okay, das ist wahrscheinlich eine bessere Art und Weise jetzt, dass ich darüber nachdenke! – DrewT

+0

Nicht so elegant, wie ich möchte, da ich jetzt Benutzereingaben reinigen und flüchten muss, aber es funktionierte – stevendesu

+2

Wenn Sie eine Zahl als Variable übergeben müssen, ändern Sie die 3000 zu einem?, Und übergeben Sie es stattdessen. 'Property :: whereRaw ('(Preis/Acres) =?', [$ Yourvariable]) -> get();' Dies kann nicht mit Spaltennamen gemacht werden. – aynber

0

Sie haben recht Sie können in Laravel nicht angeben, wo diese Anweisungen stehen. Eine Option, die Sie immer haben, ist eine rohe SQL-Anweisung mit der DB Fassade einreichen - https://laravel.com/docs/5.3/database#running-queries

Zum Beispiel:

$price_per_acre = DB::select('SELECT * FROM properties WHERE (price/acres) = 3000');