2017-04-25 3 views
2

ich bin etwas verwirrt, dass konvertieren, wie meine Abfrage in Laravel konvertieren ..wie meine MySQL-Abfrage in Laravel

select users.username,users.photo, questions.*, 
(Select count(*) from answers 
where answers.q_id=questions.id) as aAccount from questions 
INNER JOIN users ON users.id=questions.user_id 
+1

Verwendung roh Abfragemethode – JYoThI

+0

http://stackoverflow.com/questions/23826949/convert-sql-query-with-subquery-to-laravel- Abfrage. Dies kann helfen & yeah verwenden rohe Abfrage als @JYoThI vorgeschlagen –

+0

https://laravel.com/docs/5.4/ Abfragen verwenden Laravel Abfrage Builder –

Antwort

2

Verwenden Raw Abfrage

diese Ausdrücke in die Abfrage injiziert werden als Strings, also seien Sie vorsichtig, keine SQL-Injektionspunkte zu erstellen! Um einen rohen Ausdruck zu erstellen, können Sie die DB verwenden :: raw Methode

DB::table('questions') 
    ->join('users', 'users.id', '=', 'questions.user_id') 
    ->select('users.username','users.photo', 'questions.*', 
    DB::raw(" 
    ( Select count(*) from answers 
     where answers.q_id=questions.id 
    )as 'aAccount'") 
    ->get(); 
1

I upvoted JYoThl Antwort, wie es ist genau, wie ich Zusammenbruch würde diese Abfrage in beredt, wenn auch in Fällen, in denen ein Teil Ihrer Eloquent Abfrage wird roh, ich persönlich bevorzuge die gesamte sql roh. Sie können bei Bedarf Variablen einfügen.

Nach meiner Erfahrung wird der Zeitaufwand für die Normalisierung einer komplexeren Abfrage wie dieser verwendet, wenn Sie den Code erneut lesen.

So würden Sie Ihre SQL im Rohformat übergeben. Ich mag es auch, das Array in eine Sammlung umzuwandeln, da Sammlungen eine Vielzahl von Methoden bieten. Hoffe das hilft!

Sie würden Variablen in einen array() - Bereich einfügen, wenn Sie eine Variable injizieren möchten. Wenn Sie wollten tun, dass Sie so etwas tun würde:

DB::select(DB::raw("select * from user where user = :user"), array('user' => $user))