Có vẻ như bạn đang thiết lập một quan hệ đa hình, trong trường hợp đó, tôi sẽ làm cho mọi thứ riêng biệt có nghĩa là bạn sẽ có một mô hình cho Cat, Dog, Turtle và PetData. Bạn sẽ có bộ điều khiển cho CatController, DogController và TurtleController. Và bạn sẽ có biểu mẫu Mèo, biểu mẫu Chó và biểu mẫu Rùa, mỗi biểu mẫu cũng chứa đầu vào cho dữ liệu bạn yêu cầu cho bảng pet_info của mình.
Để tạo quan hệ đa hình, bảng pet_data của bạn sẽ yêu cầu một số thay đổi. Chỉ cần thay đổi cột của bảng thành pet_type
. Laravel mong đợi một tên nhất định cho cột này và nội dung của nó là tên của một mô hình chứ không phải là tên của bảng của bạn.
Việc thiết lập các mô hình cho những thứ này rất dễ dàng, tôi sẽ thực hiện phần PetData và Dog để bắt đầu.
class Dog extends Eloquent
{
protected $table = 'dogs_data';
protected $timestamps = false;
public function petData()
{
return $this->morphMany('PetData', 'pet');
}
}
class PetData extends Eloquent
{
protected $timestamps = false;
public function pet()
{
return $this->morphTo();
}
}
Có thể đọc thêm về điều này tại đây ... http://laravel.com/docs/eloquent# quan hệ đa hình
Ý tưởng về việc có các mô hình / bộ điều khiển riêng biệt cho mọi thứ có vẻ tốn nhiều công sức, nhưng nó sẽ đi một chặng đường dài khi cố gắng duy trì hoặc thêm động vật bổ sung vào ứng dụng của bạn vì bạn hiếm khi phải sửa đổi mã sản xuất, làm mất khả năng giới thiệu nhiều lỗi hơn khi cố gắng thêm các cải tiến vào trang web của bạn.
Giờ đây, việc lưu thú cưng và dữ liệu liên quan đến thú cưng trở nên rất dễ dàng mà không phải lo lắng về pet_id và pet_type trong bảng pet_data, Laravel sẽ giải quyết việc đó cho bạn. Chức năng trên bộ điều khiển chó của bạn có thể trông giống như thế này ...
class DogController extends BaseController
{
public function save()
{
$dog = new Dog;
$dog->name = Input::get('name');
$dog->age = Input::get('age');
$dog->save();
$pet_data = new PetData;
$pet_data->color = Input::get('color');
$dog->petData()->save($pet_data);
}
}
Đối với việc tạo một bộ điều khiển khác cho quản trị viên, tôi sẽ nói có, hãy làm điều đó. Sẽ không bao giờ phiền khi giữ các phần của trang web mà bạn cho là khác nhau trong các tệp khác nhau. Nó không chỉ giúp ích cho việc tổ chức, mà một lần nữa, giúp tách rời các mối quan tâm mà bạn có thể nên đọc thêm.
Ngoài ra còn có một số tùy chọn tuyệt vời của bên thứ 3 để quản lý các vai trò. Tôi đã sử dụng zizaco/entrust
trước đây và thấy nó rất dễ quản lý. Nó có thể giúp cuộc sống của bạn dễ dàng hơn rất nhiều khi cố gắng quản lý những người có thể làm những gì trên ứng dụng web của bạn.