2013-03-22 12 views
6

मैं लार्वेल के लिए नया हूं, और इसके साथ एक फोटो एलबम बनाने की कोशिश कर रहा हूं। मेरे समस्या यह है कि मैं अपने डेटाबेस के लिए प्रयोक्ता आईडी और समूह आईडी डालने के लिए देते हैं फ़ंक्शन का उपयोग करें, यह ठीक काम करता है, लेकिन दस्तावेज में इसे संलग्न समारोहलैरवेल एलोक्वेंट कई से कई संलग्न

उदाहरण के लिए, शायद भूमिका के बारे में आप इस का कहना है पहले से ही उपयोगकर्ता से अटैचमेंट करना चाहते हैं। बस देते विधि का उपयोग करें:

तो मैं इसे उसी तरह उपयोग करना चाहता था, अगर album_id पहले से ही मौजूद बस इसे अद्यतन करते हैं, अन्य बुद्धिमान thr नया सम्मिलित करें, लेकिन मेरी समस्या यह हमेशा insters है, यह जाँच करता है नहीं है album_id पहले से ही exsits अगर

मेरे मॉडल

class User extends Eloquent 
{ 
    public static $timestamps = false; 

    public function album() 
    { 
     return $this->has_many_and_belongs_to('album', 'users_album'); 
    } 

} 

पोस्ट समारोह

public function post_albums() 
    { 

     $user = User::find($this->id); 

     $album_id = Input::get('album'); 

     $path = 'addons/uploads/albums/'.$this->id.'/'. $album_id . '/'; 

     $folders = array('path' => $path, 'small' => $path. 'small/', 'medium' => $path. 'medium/', ); 

     if (! is_dir($path)) 
     { 
     foreach ($folders as $folder) 
     { 
      @mkdir($folder, 0, true); 
     } 
     } 


    $sizes = array( 
     array(50 , 50 , 'crop', $folders['small'], 90), 
     array(164 , 200 , 'crop', $folders['medium'], 90), 
    ); 

    $upload = Multup::open('photos', 'image|max:3000|mimes:jpg,gif,png', $path) 
      ->sizes($sizes) 
      ->upload(); 

    if($upload) 
    { 
     $user->album()->attach($album_id); 
     return Redirect::back(); 
    } 
    else 
    { 
     // error show message remove folder 
    } 

    } 

क्या कोई यह बता सकता है कि मैं क्या गलत कर रहा हूं? या मैं पूरी तरह से संलग्न समारोह गलत misststod?

+0

वैसे: http://area51.stackexchange.com/proposals/46607/laravel – Kriem

+0

आपके द्वारा पोस्ट किए गए लिंक के बारे में क्या? –

+0

लार्वेल स्टैक एक्सचेंज प्रस्ताव के लिए बस एक लिंक, जो लारवेल में रूचि रखते हैं। – Kriem

उत्तर

1

धन्यवाद @Collin मैं देखा मैं मैं कल

$album = $user->album()->where_album_id($album_id)->get(); 

     if(empty($album)) 
     { 
      $user->album()->attach($album_id); 
     } 
6

मेरा मानना ​​है कि आपने संलग्न फ़ंक्शन को गलत समझा है। सिंक फ़ंक्शन संबंध जोड़ने के लिए अनुलग्नक का उपयोग करता है लेकिन केवल तभी जब संबंध पहले से मौजूद नहीं है। वहां क्या किया गया था, मैं सुझाव देता हूं कि आईडी की एक सूची खींचने के बाद केवल तभी सम्मिलित करें यदि यह सूची में पहले से मौजूद नहीं है।

$current = $user->album()->lists('album_id'); 
if (!in_array($album_id, $current)) 
{ 
    $user->album()->attach($album_id); 
} 

एक तरफ नोट पर मैं सुझाव दे रहा हूं कि आप लार्वेल से डिफ़ॉल्ट नामकरण सम्मेलन का पालन करें। रिलेशनशिप विधि $ user-> एल्बम() होना चाहिए क्योंकि उनमें से कई हैं। पिवट टेबल को 'album_user' भी नामित किया जाना चाहिए। आप बाद में धन्यवाद देंगे।

2

मेरा चैक किए गए Contains method of Laravel Collections

laravel संग्रह एक बहुत ही उपयोगी विधि 'शामिल' प्रदान करता है गलत। यह निर्धारित करता है कि संग्रह में कोई कुंजी मौजूद है या नहीं। आप $user->album का उपयोग कर अपने मामले में संग्रह प्राप्त कर सकते हैं। आप अंतर को ध्यान में रख सकते हैं कि एल्बम बिना संश्लेषण के है।

कार्य कोड

अब तुम सब करने की थी contains विधि का उपयोग है। पूरा कोड होगा।

if (!$user->album->contains($album_id) 
{ 
    $user->album()->attach($album_id); 
} 

आवश्यक समाधान प्राप्त करने के लिए यह अधिक क्लीनर और 'लैरवेल' तरीका है।

+0

यह आसान है, लेकिन डेटाबेस से उपयोगकर्ता के लिए सभी एल्बमों का पूरा विवरण खींचने के लिए अपर्याप्त लगता है। आप केवल यह जानना चाहते हैं कि एक विशिष्ट एल्बम उस उपयोगकर्ता से संबंधित है या नहीं। – Jason

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