如何实现我的模型关系并确保只有一对一 - Laravel

时间:2016-05-07 10:38:45

标签: php laravel models relation

我对Laravel和框架都很陌生,所以我正在学习很多东西。

登录后的用户转到显示表单的页面。我希望只有在以前没有填写此表格时才能显示此表格。

我的桌子就像这样

User                         Registration Q's
---------------------------------------------------
user_id                        reg_id
name                           q1
email                          q2
password                       q3
                               user_id

我的user.php模型:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    public function userq()
    {
        return $this->hasOne('Userreq');
    }

userregq.php模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class userregq extends Model
{
  protected $table = 'userregq';
  public $timestamps = false;

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

如果有人可以帮助我确保只有一个用户只有一份注册问卷,那么只有他们不这样做才会显示?

由于

1 个答案:

答案 0 :(得分:1)

我认为首先您需要重新设计数据库,因为多对多关系更适合。用户可以回答多个问题,并且可以向许多用户询问一个问题,您还需要存储答案,以便重新设计:

User         Answer         Question
---------------------------------------
user_id      answer_id      question_id
name         user_id        question
email        question_id
password     answer

然后写下您的Eloquent模型。

当用户登录时,您从具有登录用户ID的答案表中检索记录,如果没有,则显示问卷。

当你是laravel的新手时,你可能想在Laracasts Laravel 5 Fundamentals查看Jeffrey Way的这些精彩视频教程。