Tôi có hai mô hình trong ứng dụng web Laravel 4.2 của mình, User
và Group
. Người dùng có thể là thành viên của nhiều nhóm và một nhóm có thể có nhiều thành viên. do đó cả hai mô hình được nối với một mối quan hệ nhiều-nhiều:Laravel - Chọn các cột cụ thể trên các mối quan hệ nhiều-nhiều
<?php
class User extends Eloquent {
public function groups()
{
return $this->belongsToMany('Group');
}
}
class Group extends Eloquent {
public function users()
{
return $this->belongsToMany('User');
}
}
?>
Một trong những nguồn lực API của tôi là /groups
, trong đó liệt kê tất cả các nhóm có sẵn trong ứng dụng:
<?php
$groups = Group::with('users')->all();
?>
này hoạt động, tuy nhiên trong phản hồi JSON mà mỗi người dùng chứa tất cả các trường từ bảng users
(ngoại trừ tất cả các trường trong thuộc tính $hidden
). Tôi muốn mối quan hệ này chỉ trả lại một tập hợp các trường cụ thể thay vì toàn bộ bảng.
Trong loại mối quan hệ khác mà tôi có thể dễ dàng đạt được điều này với các tuyên bố sau (giả sử bây giờ mà người dùng có thể thuộc về một nhóm):
<?php
public function users()
{
return $this->hasMany('User')->select(['id', 'first_name', 'last_name']);
}
?>
Tuy nhiên, trên dường như không làm việc với nhiều-to- nhiều mối quan hệ. Tôi đi qua this question mà dường như đề cập đến cùng một vấn đề và có vẻ như điều này là không thể trong Laravel 4.1. Tác giả của câu trả lời được chọn, tptcat, cung cấp liên kết tới vấn đề trên trình theo dõi vấn đề Github của Laravel, nhưng liên kết không còn hoạt động nữa và tôi không thể xác định được sự cố này vẫn mở trong phiên bản 4.2.
Có ai đi qua điều này và quản lý thành công để giải quyết nó?
Có, tính năng này không hoạt động. Tuy nhiên, nếu tôi thực hiện các truy vấn tương tự trong các hành động khác nhau trong bộ điều khiển của mình, tôi phải truyền cùng một mảng cho tất cả chúng. Tôi đang nhắm đến một giải pháp tương tự như những gì có thể được thực hiện với các loại mối quan hệ khác. – cafonso
Bạn luôn có thể tạo một hàm thực hiện các truy vấn phổ biến này trong mô hình của bạn và gọi nó từ các hành động khác nhau trong bộ điều khiển của bạn. – Oni