访问相关模型

时间:2016-05-20 08:34:19

标签: laravel laravel-5 laravel-5.1

我有一个用户模型,用户可以有很多项目

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

然后我有一个项目模型,一个项目可以有很多文档

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

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

文档可以包含许多DocumentData

public function project()
{
    return $this->belongsTo('App\Project', 'projectId');
}

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

然后我有了DocumentData Model

public function document()
{
    return $this->belongsTo('App\Document', 'documentId');
}  

现在我认为这些关系是根据外键正确设置的。

现在,在我的一个控制器中,我获得了项目的选择文档并将其传递给我的视图。如果我做

 {{dd($selectedDoc)}}

我可以看到类似的东西

Document {#298 ▼
  #table: "document"
  #guarded: []
  #attributes: array:7 [▼
    "id" => "1"
    "projectId" => "1"
    "name" => "someDoc"
    "description" => "someDocdocument"
    "deleted_at" => null
    "created_at" => "2016-05-20 08:43:06"
    "updated_at" => "2016-05-20 08:43:06"
  ]
}

所以我的观点是获得正确的文档。现在我需要获取此文档的数据。所以我认为我有类似的东西。

$selectedDoc->documentData->where('key', 'whoData')->first()->value

但是,当我这样做时,我收到错误

Column not found: 1054 Unknown column 'document_data.document_id' in 'where clause'

因此,由于某种原因,它使用的是document_id而不是documentId。如何从我的视图中获取与文档关联的数据?

由于

数据库架构

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('userName')->default('');
    $table->string('userEmail')->default('');
    $table->tinyInteger('active')->default(1);
    $table->timestamps();
});

Schema::create('projects', function (Blueprint $table) {
    $table->increments('id');
    $table->string('projectName')->default('');
    $table->string('projectValue')->default('');
    $table->integer('userId')->unsigned()->default(0);
    $table->foreign('userId')->references('id')->on('users')->onDelete('cascade');
    $table->tinyInteger('active')->default(1);
    $table->softDeletes();
    $table->timestamps();
});

Schema::create('document', function(Blueprint $table)
{
    $table->increments('id');
    $table->integer('projectId')->unsigned()->default(0);
    $table->foreign('projectId')->references('id')->on('projects')->onDelete('cascade');
    $table->string('name')->default('')->nullable();
    $table->longText('description')->default('')->nullable();
    $table->softDeletes();
    $table->timestamps();
});

Schema::create('document_data', function(Blueprint $table)
{
    $table->increments('id');
    $table->integer('documentId')->unsigned()->default(0);
    $table->foreign('documentId')->references('id')->on('document')->onDelete('cascade');
    $table->string('key')->default('')->nullable();
    $table->longText('value')->default('')->nullable();
    $table->softDeletes();
    $table->timestamps();
});

更新 如果我将我的文档模型更改为此工作

public function documentData()
{
    return $this->hasMany('App\DocumentData', 'documentId');
}

但是在文档和文档数据模型中设置外键是不是错了?

0 个答案:

没有答案