php एक अतिरिक्त पिवट टेबल कॉलम लार्वेल का मूल्य प्राप्त करना




mysql laravel (2)

मेरे पास एक फोन_मोडल्स, फोन_प्रोबलेम्स और एक फोन_मोडेल_फोन_प्रोबलेम पिवट टेबल है। पिवट तालिका में एक अतिरिक्त कॉलम 'मूल्य' है।

फोन का मॉडल:

class PhoneModel extends \Eloquent
{
    public function problems()
    {
        return $this->belongsToMany('RL\Phones\Entities\PhoneProblem')->withPivot('price');
    }
}

PhoneProblem:

class PhoneProblem extends \Eloquent
{
    public function models()
    {
        return $this->belongsToMany('PhoneModel')->withPivot('price');
    }
}

जो मैं करने की कोशिश कर रहा हूं वह एक विशिष्ट समस्या के साथ एक विशिष्ट फोन की कीमत प्राप्त कर रहा है।

इस तरह मेरे पास अब यह है, लेकिन मुझे लगता है कि लार्वाले को एलोक्वेंट फीचर में बनाया गया है, मैं इसे एक बहुत ही सरल तरीके से नहीं ढूंढ सकता:

$model = $this->phoneService->getModelFromSlug($model_slug);
$problem = $this->phoneService->getProblemFromSlug($problem_slug);

यह सब उनके मॉडल से विशिष्ट मॉडल और समस्या का चयन करता है।

तो मैं उन प्रमाण-पत्रों के साथ क्या करता हूं, मुझे इस तरह की कीमत मिलती है:

$row = DB::table('phone_model_phone_problem')
->where('phone_model_id', '=', $model->id)
->where('phone_problem', '=', $problem->id)
->first();

तो अब मैं कीमत इतनी $row->price कीमत की तरह प्राप्त कर सकता हूं लेकिन मुझे लगता है कि ऐसा करने के लिए बहुत आसान और अधिक 'लार्वेल' तरीका होना चाहिए।


Answer #1

Eloquent के साथ कई रिश्तों का उपयोग करते समय, परिणामस्वरूप मॉडल स्वचालित रूप से एक pivot विशेषता असाइन की जाती है। उस विशेषता के माध्यम से आप पिवट तालिका कॉलम तक पहुंचने में सक्षम हैं। हालांकि डिफ़ॉल्ट रूप से पिवट ऑब्जेक्ट में केवल चाबियाँ हैं। अपने कॉलम भी वहां प्राप्त करने के लिए, आपको रिश्ते को परिभाषित करते समय उन्हें निर्दिष्ट करना होगा:

return $this->belongsToMany('Role')->withPivot('foo', 'bar');

आधिकारिक डॉक्स

यदि आपको एलोक्वेंट के साथ संबंधों को कॉन्फ़िगर करने का कार्य अधिक मदद की ज़रूरत है, तो मुझे बताएं।

संपादित करें

कीमत पूछने के लिए यह करें

$model->problems()->where('phone_problem', $problem->id)->first()->pivot->price

Answer #2

पिवट तालिका से डेटा प्राप्त करने के लिए :

$price = $model->problems()->findOrFail($problem->id, ['phone_problem'])->pivot->price;

या यदि आपके पास अलग-अलग मूल्य के साथ कई रिकॉर्ड हैं:

$price = $model->problems()->where('phone_problem', $problem->id)->firstOrFail()->pivot->price;

के अतिरिक्त।

पिवट में डेटा अपडेट करने के लिए आप नए तरीके से जा सकते हैं:

$model->problems()->sync([$problemId => [ 'price' => $newPrice] ], false); 

जहां दूसरा परम झूठा अर्थ है कि आप अन्य सभी संबंधित मॉडलों को अलग नहीं करते हैं।

या, पुराने रास्ते जाओ

$model->problems()->updateExistingPivot($problemId, ['price' => $newPrice]);

और आपको याद दिलाता है:

हटाने के लिए :

$model->problems()->detach($problemId);

नया बनाने के लिए :

$model->problems()->attach($problemId, ['price' => 22]);

यह परीक्षण किया गया है और Laravel 5.1 में काम साबित कर दिया और पढ़ें।





pivot-table