Php Laravel模型透视表1-1关系应为1-M

Php Laravel模型透视表1-1关系应为1-M,php,html,mysql,laravel,laravel-4,Php,Html,Mysql,Laravel,Laravel 4,我的Laravel模型有一个问题,我试图使用我数据库中已有的透视表,这是我正在使用的表的布局 客户 工作 客户工作 我相信错误在我的模型中,我不完全理解雄辩的语法,但我一直在尝试其他几种方法。我想在clients jobs表中保留primary,以便更容易地对其进行索引 以下是我的模型: 客户 工作 ClientsJobs(也许我应该删除这个模型?我用对了吗?) 我用来尝试显示clients jobs表的所有记录的代码如下(感谢sebastien): 这段代码适用于前两条记录,但“未知”之

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

客户

工作

客户工作

我相信错误在我的模型中,我不完全理解雄辩的语法,但我一直在尝试其他几种方法。我想在clients jobs表中保留primary,以便更容易地对其进行索引

以下是我的模型: 客户

工作

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

我用来尝试显示clients jobs表的所有记录的代码如下(感谢sebastien):

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


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

您应该删除
客户端JOBS
模型,这是不必要的。当正确设置时,Laravel的
belongTomany
关系将处理透视表本身。看看:

多对多关系是一种更复杂的关系类型。一 这种关系的示例是具有多个角色的用户,其中 角色也由其他用户共享。例如,许多用户可能有 “管理员”的角色。这需要三个数据库表 关系:用户、角色和角色\用户。角色_用户表为 根据相关模型名称的字母顺序派生,以及 应具有“用户id”和“角色id”列

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

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

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

嘿!我认识一个问题…:-)是的,我有点不耐烦,我需要离开stackoverflow
protected $table = 'jobs';
protected $fillable = array('first_name', 'last_name', 'email');
protected $primaryKey = "id";


public function clientsjobs() {
    return $this->belongsToMany('ClientsJobs');
}
protected $table = 'clients-jobs';
protected $primaryKey = "id";

public function clients() {
    return $this->hasOne('Client', 'id');
}
public function jobs() {
    return $this->hasOne('Job', 'id');
}
$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;
return $this->belongsToMany('Role', 'user_roles', 'user_id', 'foo_id');