欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

关系(一对一)

我是新来的Laravel就喜欢我所看到的这么远。这是我的问题。在我的示例应用程序,我有2款用户和用户配置文件。他们是一对一的关系。我可以使用下面的添加用户配置文件:

$user = User::find(10);$profile = new UserProfile();$profile->name = 'Steven';$user->UserProfile()->save($profile);

问题在于如何更新用户配置文件—>的名字吗?

我认为这样的工作

$user->UserProfile()->name = 'Steven';$user->save();

但我得到错误,这样显然是错误的。

谁能有所启示和帮助我。

谢谢你

  • 史蒂文
 
usm4n说3年前

在你的用户模型定义的关系

class User extends Eloquent {

    public function profile()
    {
        return $this->hasOne('Profile'); //Profile is your profile model
    }

}

现在你可以访问轮廓像:

$profile = $user->profile();
$profile->whatever = 'anything';

“usm4n,我说,我的模型和功能做了如下

$user = User::find(10);$profile = $user->UserProfile();$profile->name = 'Steven';$profile->save();

返回的错误:

1通过errorexceptionargument照亮\ \ \ \ hasoneormany关系数据库功能::save()必须实例说明\数据库\功能\模型,没有考虑

所有我想要做的是如果有user_id没有档案记录(10),创建一个。如果有一个用户配置文件记录,更新。还要注意,只能有1的记录在表中为每个用户配置文件。我在user_id柱独特的关键。

感谢

usm4n说3年前

试试这个:

$user = User::find(10);
$profile = $user->profile();
$profile->name = 'Steven';
$user->profile()->save($profile);

希望这有助于…请阅读详情的文件。

zenry说3年前
$profile = $user->profile();

应该是

$profile = $user->profile; // note the removal of ()

$profile = $user->profile()->first();

开源的http://laravel.com /文档/雄辩#动态属性

“usm4n,我读过的文档,但它似乎并没有回答我的问题。我试过你的方法,得到一个误差仍然

“zenry,我删除了(),得到了下面的错误

errorexceptioncreating默认对象从空值

My Code:$user = User::find(10);$profile = $user->UserProfile;$profile->name = 'Steven';

$user->UserProfile()->save($profile);

zenry说3年前

look at this posthttp://laravel.io/forum/02-19-2014-relationships-one-to-one?page=1#reply-1691

你需要有一个方法在你的用户类的名称为“用户配置文件”,你要使用你的代码$user->UserProfile;

'$user->UserProfile;'

用户:(用户配置文件):-(

@ zenry,这里是我的模型

user.php

<?phpuse Illuminate\Auth\UserInterface;use Illuminate\Auth\Reminders\RemindableInterface;class User extends Eloquent implements UserInterface, RemindableInterface { public $timestamps = true; public function UserProfile() { return $this->hasOne('UserProfile'); }}UserProfile.php<?phpclass UserProfile extends Eloquent { public $table = 'user_profiles'; public $timestamps = false; public function user() { return $this->belongsTo('User'); }}From the looks of everything, it's correct, but I'm still getting errors. Worth noting, if a record in the user_profiles table exists with the user_id of 10 it will update fine with the above code.
alainbelez说3年前解决方案

也许你需要初始化之前使用它。

$user = User::find(10);
$profile = $user->UserProfile ?: new UserProfile;
$profile->name = 'Steven';
$user->UserProfile()->save($profile);
usm4n说3年前

试着去喜欢这:

  1. 创建名为“用户表”
  2. 创建名为“文件表”
  3. 创建一个用户模型命名为“用户”:
class User extends Eloquent implements UserInterface, RemindableInterface {

public function profile() {
    return $this->hasOne('Profile');
}
...
}
  1. 创建剖面模型命名为“个人档案”:
class Profile extends Eloquent {

public function user() {
    return $this->belongsTo('User');
}
}
  1. 在你的控制器使用:
$user = User::find(10);
$profile = $user->profile;   // as zenry pointed out the typo.
$profile->name = 'Steven';
$user->profile()->save($profile);

也许这有助于:(

谢谢大家的帮助。我真的很感激。原来“alainbelez回答是我所需要的解决方案。

来自 https://laravel.io/forum/02-19-2014-relationships-one-to-one


普通分类: