我在这里看到类似的问题,但没有找到任何合适的答案,因此再次询问。如果您知道任何主题,请指导我,
我有
模型用户和模型属性,两者都有地址
class Address {
protected $fillable = ['address','city','state','zip'];
public function addressable(){
return $this->morphTo();
}
}//Address
class User extends Eloquent {
protected $fillable = ['first_name','last_name', 'title'];
public function address(){
return $this->morphMany('Address', 'addressable');
}
}//User
class Property extends Eloquent {
protected $fillable = ['name','code'];
public function address(){
return $this->morphMany('Address', 'addressable');
}
}//Property
是否有任何方法可以使用UpdateIfNotCreate类型方法来更新地址以及与用户/属性相关联?
泰勒奥特威尔的官方回答,$account = Account::find(99);
User::find(1)->account()->associate($account)->save();
无效,因为我收到了异常
消息:"调用未定义的方法Illuminate \ Database \ Query \ Builder :: associate()"
type:" BadMethodCallException"
我解决问题的方法如下:
$data = Input::all();
if($data['id'] > 0){
$address_id = $data['id']; unset($data['id']);
$address = Address::find($address_id)->update($data);
}//existing
else{
$address = new Address($data);
User::find($user_id)->address()->save($address);
}//add new
我可以使用不同的路由(PUT到/更新{id}和POST到/) 但在我的情况下,新记录和现有记录都来到同一路径(/ update)
你们可以推荐更好的方法来解决这个问题吗?
THX,
答案 0 :(得分:0)
这很简单:
// get only applicable fields
$input = Input::only('address','city','state','zip');
// get existing or instantiate new address
$address = Address::firstOrNew($input);
// associate the address with the user
// btw I would rather call this relation addresses if it's morhpmany
User::find($userId)->addresses()->save($address);
不确定泰勒的答案在哪里,但我不认为这是应该的。无论如何它都无法发挥作用。