2013-03-22 35 views
6

Tôi mới làm quen với laravel và cố gắng xây dựng một album ảnh với nó. Vấn đề của tôi là tôi sử dụng chức năng đính kèm để chèn id người dùng và id nhóm cơ sở dữ liệu của tôi, nó hoạt động ổn, nhưng trong tài liệu hướng dẫn nó nói này về đính kèm chức năngLaravel Eloquent nhiều người đính kèm

Ví dụ, có lẽ là vai trò bạn muốn đính kèm với người dùng đã tồn tại . Chỉ cần sử dụng phương thức đính kèm:

Vì vậy, tôi muốn sử dụng nó theo cách tương tự, nếu album_id đã tồn tại, chỉ cần cập nhật thông tin mới, nhưng vấn đề của tôi là luôn luôn thay đổi, nó không kiểm tra nếu album_id đã exsits

mô hình của tôi

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

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

} 

bài chức năng

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 
    } 

    } 

Xin vui lòng ai đó chỉ ra những gì im làm sai? Hoặc tôi hoàn toàn hiểu sai chức năng đính kèm?

+0

Bằng cách này: http://area51.stackexchange.com/proposals/46607/laravel – Kriem

+0

còn liên kết bạn đã đăng thì sao? –

+0

Chỉ cần một liên kết đến đề xuất Trao đổi Stack của Laravel, cho những ai quan tâm đến Laravel. – Kriem

Trả lời

1

Cảm ơn @Collin tôi nhận thấy tôi hiểu lầm tôi đã thực hiện kiểm tra của tôi ngày hôm qua

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

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

Tôi tin rằng bạn đã hiểu sai chức năng đính kèm. Chức năng đồng bộ hóa sử dụng đính kèm để thêm mối quan hệ nhưng chỉ khi mối quan hệ không tồn tại. Sau những gì đã được thực hiện ở đó, tôi muốn đề nghị kéo một danh sách các id sau đó chỉ chèn nếu nó đã không tồn tại trong danh sách.

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

Tôi lưu ý rằng bạn nên tuân theo quy ước đặt tên mặc định từ laravel. Phương thức quan hệ phải là $ user-> albums() vì có nhiều phương thức. Bảng tổng hợp cũng nên được đặt tên là 'album_user'. Bạn sẽ cảm ơn bản thân sau.

2

Contains method of Laravel Collections

Các bộ sưu tập laravel cung cấp một phương pháp rất hữu ích 'chứa'. Nó xác định nếu một khóa tồn tại trong bộ sưu tập. Bạn có thể lấy bộ sưu tập trong trường hợp của mình bằng cách sử dụng $user->album. Bạn có thể lưu ý sự khác biệt mà album không có dấu ngoặc đơn.

đang

Làm việc Bây giờ tất cả bạn phải làm là sử dụng phương pháp contains. Mã đầy đủ sẽ là.

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

Cách thức sạch hơn và 'Laravel' của giải pháp được yêu cầu hơn.

+0

Điều này rất tiện lợi, nhưng có vẻ lãng phí khi phải lấy toàn bộ chi tiết của tất cả các album cho người dùng từ cơ sở dữ liệu. Bạn chỉ muốn biết liệu một album cụ thể thuộc về người dùng đó hay không. – Jason

Các vấn đề liên quan