2015-11-05 16 views
8

में इलोक्वेंट का उपयोग करके पिवोट टेबल को कैसे अपडेट करें मैं लार्वेल के लिए नया हूं। मैं एक लार्वेल 5 ऐप पर काम कर रहा हूं और मैं यहां फंस गया हूं। मैं इस तरह के रूप में 2 मॉडल:लार्वेल 5

class Message extends Eloquent{ 

    public function user() 
    { 
     return $this->belongsTo('App\User', 'from'); 
    } 

    public function users() 
    { 
     return $this->belongsToMany('App\User')->withPivot('status'); 
    } 
} 

class User extends Eloquent { 

    public function messages() 
    { 
     return $this->hasMany('App\Message', 'from'); 
    } 

    public function receive_messages() { 
     return $this->belongsToMany('App\Message')->withPivot('status'); 
    } 
} 

मौजूद एक कई-से-अनेक संदेश और उपयोगकर्ता के बीच संबंधों को मुझे इस तरह के रूप पिवट तालिका दे रही है:

Table Name: message_user 
Colums: 
message_id 
user_id 
status 

मैं जैसे एक SQL क्वेरी है:

update message_user 
set status = 1 
where user_id = 4 and message_id in (select id from messages where message_id = 123) 

मैं इस क्वेरी को लार्वेल समकक्ष में कैसे अनुवाद कर सकता हूं?

+0

दोस्त 'से' का मतलब क्या है? –

+0

विदेशी कुंजी @ मोहम्मद –

+0

दोस्त दूसरा तर्क संयोजन तालिका का नाम है, आपके उदाहरण में यह 'message_user' होना चाहिए, ** ** ** ** ** ** ** ** ** ** ** में वापसी के लिए कुल अधिकार संबंध: ' > हैनी ('ऐप \ संदेश \,' message_user ',' user_id ',' message_id '); ' –

उत्तर

7

कोड नीचे हल मेरी समस्या:

$messages = Message::where('message_id', $id)->get(); 
foreach($messages as $message) 
    $message->users()->updateExistingPivot($user, array('status' => 1), false); 
-1

अपनी पिवोट टेबल को अपडेट करने के लिए आप UpdateExistingPivot विधि का उपयोग कर सकते हैं।

+0

धन्यवाद @ बाबर। क्या आप किसी भी नमूना कोड को जोड़ सकते हैं कि मैं पोस्ट पर क्वेरी के साथ आने के तरीके का उपयोग कैसे कर सकता हूं। –

+0

आप http://laravel.com/docs/5.0/eloquent#working-with-pivot-tables पर संदर्भ कोड देख सकते हैं उपयोगकर्ता :: ढूंढें (1) -> भूमिकाएं() - > UpdateExistingPivot ($ RoleId, $ विशेषताएँ); –

3

आप इन दो कार्यों के पर उपयोग कर सकते हैं, sync()attach() और संक्षेप में सम्मान है कि सिंक अपना पहला तर्क और यह सिंक पाइवट टेबल (निकाल कर अपने सरणी में पारित कर दिया कुंजियों को जोड़ने) साथ के रूप में सरणी मिल जाएगा है जिसका अर्थ है कि अगर आपको अपनी जंक्शन तालिका में मूल्यवान 3,2,1 मिल गया है, और 3,4,2 के मानों के साथ समन्वयित हो गया है, तो सिंक स्वचालित रूप से मान 1 को हटा देगा और आपके लिए मान 4 जोड़ देगा। जहां एकल ID मान ले जाएगा संलग्न

GIST: आप अपने जंक्शन मेज पर अतिरिक्त मान जोड़ने के इतने तरह Sync() को दूसरा तर्क के रूप में यह पारित करने के लिए चाहते हैं:

$message = Messages::where('id','123'); 
$user = User::where('id','4'); 

// using ->attach for single message 
$user->message()->attach($message->id,['status' => 1 ]); 



// using ->sync for multiple messages 
$message2 = Messages::where('id','456'); // for testing 
$user->message()->sync([$message->id =>['status' => 1 ],$message2->id =>['status' => 1 ] ]); 
+1

आपके इनपुट @ मोहम्मद के लिए धन्यवाद। सिंक ने मेरे लिए चाल नहीं की। –

+0

@ फ़ोकवाबेस्ट दोस्त ऊपर आपकी टिप्पणी के आधार पर, आप केवल कई रिश्तों को चाहते हैं, इसलिए यदि आप चाहते हैं कि मैं अपना जवाब अपडेट कर सकूं और सही संबंध लिखूं और उसके बाद 'सिंक() 'होगा काम :) –

+0

दोस्त वास्तव में जब कोई उपयोगकर्ता संदेश बनाता है, तो संदेश तालिका में संग्रहीत होता है। पिवट तालिका केवल message_id और प्राप्तकर्ता ($ user_id) का रिकॉर्ड रखती है। यह अब बहुत अच्छा काम कर रहा है लेकिन मुझे वैसे भी आपका दृष्टिकोण देखना अच्छा लगेगा। –

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