我有两个模型'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()
使用phone
和user
时,可能更容易取消。
每部手机都属于一个用户。
如何制作手机?如何提供create()
用户的参数并仍然使用Route::resource
?
答案 0 :(得分:1)
我认为你的方向错误,因为User
和Phone
是两个模型,因此User
有很多phones
所以这里的Phone
模型是如果没有User
,Phone
类和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
相关联即可。希望它有意义。