gpt4 book ai didi

php - 调用未定义的方法 Illuminate\Database\Query\Builder::associate()

转载 作者:IT王子 更新时间:2023-10-28 23:50:02 25 4
gpt4 key购买 nike

引用:How can I update an existing Eloquent relationship in Laravel 4?

$userinfo = \Userinfo::find($id);
\User::find($id)->userinfo()->associate($userinfo)->save();

我收到错误:调用未定义的方法 Illuminate\Database\Query\Builder::associate()

这是整个方法:

public function saveUser($id)
{
$user = \User::find($id);

$userdata = \Input::all();

$rules = array(
'email' => 'required|email',
'state' => 'size:2',
'zip' => 'size:5',
'phone' => array('regex:/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/')
);

$validator = \Validator::make($userdata, $rules);

if ($validator->passes())
{
if ($userdata['email'] !== $user->email)
{
$rules = array('email' => 'unique:users');
$validator = \Validator::make($userdata, $rules);
if ($validator->fails()) return Redirect::route('admin.user.edit', array('user' => $user))
->with('error', 'Specified email already exists.');
}

$user->email = $userdata['email'];
$user->firstname = $userdata['firstname'];
$user->lastname = $userdata['lastname'];

$userinfoArray = array(
'address' => $userdata['address'],
'city' => $userdata['city'],
'state' => $userdata['state'],
'zip' => $userdata['zip'],
'phone' => preg_replace('/[^0-9]/', '', $userdata['phone'])
);

$user->save();

if (!$user->userinfo)
{
$userinfo = new \Userinfo($userinfoArray);
$userinfo = $user->userinfo()->save($userinfo);
}
else
{
$userinfo = \Userinfo::find($id);
\User::find($id)->userinfo()->associate($userinfo)->save();
//$user->userinfo()->update($userinfoArray);
}

return \Redirect::route('admin.user.detail', array('id' => $id))
->with('success', 'User updated.');
}

return \Redirect::route('admin.user.edit', array('id' => $id))
->withInput()
->withErrors($validator);
}

最佳答案

associate() 是 belongsTo 关系的一种方法,但从上面看起来您正试图通过 hasOne 关系调用它。

我只是猜测,因为您没有提供 Eloquent 模型类代码,所以看不到您是如何准确设置关系的,但是如果您有:

class User extends Eloquent {
public function userinfo()
{
return $this->hasOne('Userinfo');
}
}

class Userinfo extends Eloquent {

public function user() {
return $this->belongsTo('User');
}
}

然后需要针对 Userinfo 调用 associate,因为它具有附属于 associate() 方法的 belongsTo 关系。

例如

$user = \User::find(4);      
$userinfo = \UserInfo::find(1);

$userinfo->user()->associate($user);
$userinfo->save();

会将user_info表中的外键user_id设置为$user对象的id。

看看你上面的代码,这似乎不是你真正想要做的,而且

$user->userinfo()->update($userinfoArray);

您注释掉的调用实际上会完成您似乎想要实现的目标,即如果该用户已经存在,则更新与当前用户相关的用户信息。

希望这对您有所帮助。

格伦

关于php - 调用未定义的方法 Illuminate\Database\Query\Builder::associate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com