Laravel一对多的关系结果

时间:2016-11-13 14:48:00

标签: php laravel

您好我正在尝试创建一对多的关系。用户表中的一个用户可能有很多公司,另一方面公司只能有一个用户。

我对公司表的迁移是

  public function up()
    {
        Schema::create('companies', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('address');
            $table->string('city');
            $table->string('state');
            $table->string('contact_person');
            $table->string('phone');
            $table->string('industry');
            $table->string('website');
            $table->integer('id_user')->unsigned();
            $table->foreign('id_user')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
            $table->timestamps();
        });
    }

我的用户模型是

  /**
     * Get the posts for the user.
     */
    public function companies()
    {
        return $this->hasOne('App\Company','user_id');
    }

我公司的模特是

   public function users()
    {
        return $this->belongsTo('App\User','id');
    }

我想让特定用户的所有公司

尝试使用whereHas但关系对象中没有数据

      $results = Company::whereHas('users', function ($query) {
         $query->where('users.id',1);
       })->get();

我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

你应该改变的第一件事是companies()关系。它必须是hasMany,而不是hasOne

public function companies()
{
    return $this->hasMany('App\Company');
}

然后让所有公司的用户:

$result = User::where('id', $id)->with('companies')->first();

或者,如果您想在示例中使用Company模型,并且只获得公司:

$result = Company::where('user_id', $id)->get();

此外,您在迁移中使用id_user。将其更改为user_id