HasOne 和 HasMany 用于同一张表 cakephp

Posted

技术标签:

【中文标题】HasOne 和 HasMany 用于同一张表 cakephp【英文标题】:HasOne and HasMany for the same Table cakephp 【发布时间】:2017-09-16 16:03:40 【问题描述】:

我想将 hasOnehasMany 设置为相同的 model,在我的代码的一部分中我只需要 1 个结果,但在其他部分我需要所有结果(来自类型 Client 的对象将返回对于我网站中的表格):

    $this->hasOne('Vendas')
    ->setForeignKey('id_cliente')
    ->setBindingKey('id')
    ;

    $this->hasMany('Vendas')
    ->setForeignKey('id_cliente')
    ->setBidingKey('id');

这是可能的,还是我弄错了?

【问题讨论】:

【参考方案1】:

阅读手册https://book.cakephp.org/3.0/en/orm/associations.html。仔细阅读整个页面。

className:与当前模型关联的表的类名。如果您要定义“User hasOne Address”关系,则 className 键应等于“Addresses”。 条件:一组 find() 兼容条件,例如 ['Addresses.primary' => true]

为你的 assocs 定义你需要的类名和条件。

    $this->hasOne('Foo', [
        'className' => 'Foo',
        'conditions' => [/* whatever you need*/]
    ]);

    $this->hasMany('Bar', [
        'className' => 'Foo',
        'conditions' => [/* whatever you need*/]
    ]);

【讨论】:

我认为你混淆了 hasMany 的别名和类名;)【参考方案2】:

如果关系是 1-*,则应将关系定义为 hasMany()。然后为一个结果编写一个查询,为多个结果编写一个查询

【讨论】:

以上是关于HasOne 和 HasMany 用于同一张表 cakephp的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine 1.2 hasOne 覆盖 hasMany 关系

EF 核心一对多关系 HasOne().WithMany() vs HasMany().WithOne()

Yii2框架学习 3-3 单条数据详情展示; 小部件 DetailView的使用 ; 数据关联查询时 hasOne和hasMany

同一张表上的多个关系

Laravel 对同一张表的两次引用

tp的关联模型