我有一个表组织
和另一个表客户
。一个组织可以有多个客户,并且一个客户可以属于多个组织,因此多对多关系和透视表client\u organization
。
在我的模型组织中。php
我有以下几点:,
class Organisation extends Eloquent {
//Organisation __has_many__ clients
public function clients()
{
return $this->hasMany('client');
}
}
在我的客户机中。php
我拥有的模型,
class Client extends Eloquent {
public function organisations()
{
return $this->belongsToMany('organisation');
}
}
数据透视表迁移,
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateClientOrganisationTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('client_organisation', function(Blueprint $table)
{
$table->increments('id');
$table->integer('client_id')->unsigned()->index();
$table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade');
$table->integer('organisation_id')->unsigned()->index();
$table->foreign('organisation_id')->references('id')->on('organisations')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('client_organisation');
}
}
然后,我在控制器中运行以下命令,以检索所有组织和客户,
$organisations = new Organisation;
$organisations->clients()->get();
但是,这会导致以下错误:,
SQLSTATE[42S22]:找不到列: 1054未知列'clients.organisation_id'in'where子句'(SQL:选择*from客户端
where客户端
.organisation_id
为空)
现在我的理解是,不应该需要客户端。我的数据库中的Organization_id
列由于我有一个透视表,我做错了什么?我希望能够使用数据透视表获取我的所有组织及其客户。
要使用数据透视表,应在关系的两端使用belongToMany
:
class Organisation extends Eloquent {
public function clients()
{
return $this->belongsToMany('Client');
}
}
class Client extends Eloquent {
public function organisations()
{
return $this->belongsToMany('Organisation');
}
}
请注意,belongToMany
的第一个参数是类的名称,它是大写的。