gpt4 book ai didi

php - Laravel 模型数据透视表 1-1 关系应该是 1-M

转载 作者:行者123 更新时间:2023-11-29 06:29:09 25 4
gpt4 key购买 nike

我的 Laravel 模型有问题,我正在尝试使用数据库中已有的数据透视表,这是我正在使用的表的布局

客户 The "clients" table

工作 The "jobs" table

客户职位 The "clients-jobs" table

我相信错误出在我的模型中,我不完全理解 Eloquent 语法,不过我一直在尝试其他几种方法。我想将主表保留在 clients-jobs 表上,以便更轻松地对其进行索引。

这是我的模型:客户端

protected $table = 'clients';
public $timestamps = true;
protected $primaryKey = "id";

public function clientsjobs() {
return $this->belongsTo('ClientsJobs');
}

工作

protected $table = 'jobs';
protected $fillable = array('first_name', 'last_name', 'email');
protected $primaryKey = "id";


public function clientsjobs() {
return $this->belongsToMany('ClientsJobs');
}

ClientsJobs(也许我应该删除这个模型?我用对了吗?)

protected $table = 'clients-jobs';
protected $primaryKey = "id";

public function clients() {
return $this->hasOne('Client', 'id');
}
public function jobs() {
return $this->hasOne('Job', 'id');
}

我用来尝试显示 clients-jobs 表的所有记录的代码是我的一个 Controller 中的代码(感谢 sebastien):

$masterArray = array();
ClientsJobs::with('clients', 'jobs')->chunk(200, function($records) use (&$masterArray) { //Chunk Retrieves 200 Records at a time
foreach ($records as $record) {
$masterArray[] = array(
'id' => $record->id, // id
'client_name' => !empty($record->clients) ? $record->clients->fname : "Unknown",
'job_name' => !empty($record->jobs) ? $record->jobs->name : "Unknown",
'wage' => $record->wage,
'productivity'=> $record->productivity,
);
}
});
return $masterArray;

此代码适用于前两条记录,但之后“未知”,我很确定这是因为应用程序认为这是 1:1 关系(我只有 2 个用户和 2 个工作作为虚拟数据)。

提前感谢您提出的任何建议,如果您看到我所做的令人讨厌的事情,请告诉我

最佳答案

您应该删除 ClientsJobs 模型,这是不必要的。 Laravel 的 belongsToMany 关系,如果设置正确,将处理数据透视表本身。看看:

http://laravel.com/docs/4.2/eloquent

Many-to-many relations are a more complicated relationship type. An example of such a relationship is a user with many roles, where the roles are also shared by other users. For example, many users may have the role of "Admin". Three database tables are needed for this relationship: users, roles, and role_user. The role_user table is derived from the alphabetical order of the related model names, and should have user_id and role_id columns.

您的数据透视表应该按照 Laravel 的惯例命名,即采用每个模型名称(单数)并将它们与下划线字符(client_job)连接在一起,或者您可以指定数据透视表的名称表等关于你们的关系。 Laravel 的文档给出了以下示例,它允许您覆盖默认的数据透视表名称和相应的键:

return $this->belongsToMany('Role', 'user_roles', 'user_id', 'foo_id');

在您的情况下,如果您追求的是一对一关系,那么您实际上并不需要数据透视表。您可以只实现 hasManybelongsTo 关系。也就是说,一个客户端属于一个作业,但一个作业可以有多个客户端。

关于php - Laravel 模型数据透视表 1-1 关系应该是 1-M,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28980501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com