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


How to implement my models relationships and ensure only one to one - Laravel

我对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');
    }
}

如果有人能帮助我确保只有一个用户有一份注册问卷,并且只有在没有的情况下才会显示?

感谢

我认为首先需要重新设计数据库,因为多对多关系更适合。一个用户可以回答多个问题,一个问题可以被问给许多用户,你还需要存储一个答案,所以我会重新设计为:

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的这些很棒的视频教程。