2015-07-10 6 views
5

मेरे पास दो टेबल, posts और likes हैं। मुझे Eloquent का उपयोग करके एक क्वेरी, बनाने की आवश्यकता है, जो कि सभी पोस्ट को एक विशिष्ट user_id द्वारा पसंद किया गया है।क्वेरी जहां कॉलम किसी अन्य तालिका में है

SELECT * FROM posts p LEFT JOIN likes l ON p.id = l.post_id WHERE l.user_id = 2 ORDER BY l.created_at DESC 

posts तालिका:

+----+---------+------------+-------------+ 
| id | user_id | message | created_at | 
+----+---------+------------+-------------+ 
| 1 |  2 | Hello!  | <SOME TIME> | 
| 2 |  3 | World!  | <SOME TIME> | 
| 3 |  2 | Something. | <SOME TIME> | 
| 4 |  2 | Another. | <SOME TIME> | 
+----+---------+------------+-------------+ 

likes तालिका:

+----+---------+---------+-------------+ 
| id | post_id | user_id | created_at | 
+----+---------+---------+-------------+ 
| 1 |  1 |  2 | <SOME TIME> | 
| 2 |  2 |  2 | <SOME TIME> | 
| 3 |  1 |  3 | <SOME TIME> | 
| 4 |  3 |  2 | <SOME TIME> | 
+----+---------+---------+-------------+ 

यहाँ मेरी Post वर्ग है:

दूसरे शब्दों में, यह कुछ इस तरह होना चाहिए

<?php 

class Post extends Eloquent { 

    protected $table = 'posts'; 

    public function likes() 
    { 
     return $this->hasMany('Like'); 
    } 

} 

और Like वर्ग:

<?php 

class Like extends Eloquent { 

    protected $table = 'likes'; 


    public function post() 
    { 
     return $this->belongsTo('Post'); 
    } 

} 

मैं यह कैसे कर सकते हैं?

+0

आप क्यों नहीं बस laravel संबंधों का उपयोग नहीं करते हैं? उपयोगकर्ता को सेट करें <-> संबंध पसंद है? – rmobis

उत्तर

7

इस काम करना चाहिए:

$user_id = //however you get the userid here. 

$posts = Post::whereHas('likes', function ($q) use($user_id){ 
    $q->where('user_id', $user_id); 
})->get(); 
+0

यह सही उत्तर है :-) –

+1

'(मैं ट्रेन में अपने मोबाइल पर इसे लिख रहा हूं इसलिए किसी भी टाइपो से माफ़ी मांगता हूं) ', कोई समस्या नहीं, आपके लिए संपादित की गई है,' पोस्ट 'मान लीजिए' पोस्ट' :-) –

+0

सहायता मुझे इसी तरह की समस्या के साथ – AdRock

0

आप प्रदर्शन करने के लिए दो या अधिक टेबल पर मिलती है, तो निम्न कैसे आपकी क्वेरी laravel में निष्पादित किया जाएगा है Laravel के डीबी वर्ग का उपयोग कर सकते हैं:

$users = DB::table('posts') 
     ->leftJoin('likes', 'posts.id', '=', 'likes.post_id') 
     ->select('posts.*', 'likes.*') 
     ->where('likes.user_id', '=', '2') 
     ->orderBy('likes.created_at', 'desc') 
     ->get(); 

के शीर्ष पर डीबी वर्ग का उपयोग करने के लिए मत भूलना अपने नियंत्रक;

आप वाक्पटु साथ यह करने के लिए चाहते हैं, तो आपको क्या करना चाहिए follwing:

$result = Post::whereHas('likes', function ($q) use($user_id) 
       { 
        $q->where('user_id', $user_id); 
       }) 
        ->orderBy('likes.created_at') 
        ->get(); 
+0

जैसा कि सवाल कहता है, मुझे एलोक्वेंट का उपयोग करने की ज़रूरत है। – user4913694

+0

उसे 'पसंद' के बजाय व्यस्त, 'पोस्ट' की आवश्यकता है। –

संबंधित मुद्दे

 संबंधित मुद्दे