php - query - wheredate laravel
Llamar al método indefinido Iluminar / Base de datos / Query / Builder:: associate() (4)
Referencia: ¿Cómo puedo actualizar una relación Eloquent existente en Laravel 4?
$userinfo = /Userinfo::find($id);
/User::find($id)->userinfo()->associate($userinfo)->save();
Recibo el error: Call to undefined method Illuminate/Database/Query/Builder::associate()
Aquí está el método completo:
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 () es un método de la relación belongsTo, pero parece que, desde arriba, intentas llamarlo a través de la relación hasOne.
Solo estoy adivinando porque no has proporcionado tu elocuente código de clase de modelo, así que no puedo ver cómo has establecido las relaciones exactamente, pero si tienes:
class User extends Eloquent {
public function userinfo()
{
return $this->hasOne(''Userinfo'');
}
}
class Userinfo extends Eloquent {
public function user() {
return $this->belongsTo(''User'');
}
}
A continuación, debe asociarse con Userinfo, ya que tiene la relación belongsTo a la que está asociado el método associate ().
Por ejemplo
$user = /User::find(4);
$userinfo = /UserInfo::find(1);
$userinfo->user()->associate($user);
$userinfo->save();
Establecerá la clave externa user_id en la tabla user_info en la identificación del objeto $ user.
Mirando su código anterior, no parece que esto es lo que realmente está tratando de hacer y que el
$user->userinfo()->update($userinfoArray);
La llamada que ha comentado hará de hecho lo que parece que intenta lograr, que es actualizar la información del usuario que está relacionada con el usuario actual si ese usuario ya existe.
Espero que esto ayude.
Cañada
Debe especificar el campo relacionado de esta manera:
public function profile()
{
return $this->hasOne(''App/AdmProfile'', ''id'');
}
Estuve atascado en este problema por unos días y terminó siendo bastante simple de resolver. Había creado una carpeta llamada ''modelos'' en mi carpeta ''aplicación'', pero había olvidado reconfigurar mi archivo auth.php.
Este fue mi error
Call to undefined method Illuminate/Database/Query/Builder
Lo arreglé abriendo auth.php en la carpeta de configuración y cambiando la siguiente línea para incluir mi carpeta de modelos.
''providers'' => [
''users'' => [
''driver'' => ''eloquent'',
''model'' => Foodie/User::class,
fijar:
''providers'' => [
''users'' => [
''driver'' => ''eloquent'',
''model'' => Foodie/Models/User::class,
¡Espero que esto ayude!
Cambiar hasOne
a belongsTo
. Se verá así:
class User extends Eloquent {
public function userinfo()
{
return $this->belongsTo(''Userinfo'');
}
}
class Userinfo extends Eloquent {
public function user() {
return $this->belongsTo(''User'');
}
}