Laravel资源创建具有id的模型

时间:2014-06-15 14:19:47

标签: php laravel resources

我有两个模型'a''b'以及a->hasMany('b')b->belongsTo('a')

因此,当我创建一个'b'时,这应该只属于一个'a'

问题在于通常Route::resource('b', 'bController')我可以创建此'b'并且不知道它属于哪个'a'

我尝试将create()中的bController方法修改为create($id),但

Redirect::action('bController@create', $a->id)

仍然重定向到/b/create?2并发出错误

Missing argument 1 for bController::create()

使用phoneuser时,可能更容易取消。

每部手机都属于一个用户。

如何制作手机?如何提供create()用户的参数并仍然使用Route::resource

1 个答案:

答案 0 :(得分:1)

我认为你的方向错误,因为UserPhone是两个模型,因此User有很多phones所以这里的Phone模型是如果没有UserPhone类和User的子模型(相关)将无法存在,因此您只需通过控制器创建User {{1}将在创建Phone时创建,例如:

User

现在假设你有两个模型Route::resource('users', 'UserController'); User,而Phone模型有User方法来构建关系(phones)和phones = User->hasMany('Phone')模型有一个Phone方法来构建关系(user)。

user = Phone->belomgsTo('User')

现在要创建// User model class User extends Eloquent { //... public function phones() { return $this->hasMany('Phone'); } } // Phone model class Phone extends Eloquent { //... public function user() { return $this->belongsTo('user'); } } ,将使用这样的商店方法:

User

这是基本的想法,最后一点是,// UserController.php class UserController extends BaseController { // Other methods // Creates a User // URI: /users Method: POST public function store() { // Create a User using User model $user = User::create(...); if($user) { // Initialize/Create a Phone $phone = new Phone(array(...)); if($phone) { // Save the Phone and relate with User $user->phones()->save($phone); } } } } 不需要创建Phone,因为它是Controller的一部分所以当你创建时新的User然后在您创建User后从Phone创建(或更多)UserController或在更新{{1}时更新User }}

因此,如果您想加载Phone与其相关的User模型,那么您可以这样做:

User

因此,当您加载用户时,您可以在编辑用户期间加载与该用户相关的所有电话;您只需要加载Phone相关的$user = User::with('phones')->find(1); 模型,并将该模型传递给视图。

要向现有User添加新的Phone,您需要修改Phone模型,以便加载User模型User并传递User模型到视图进行编辑。将新phones添加到用户后,您只需将User与现有Phone相关联即可。希望它有意义。