代码之家  ›  专栏  ›  技术社区  ›  Seb

cakephp3与相关实体放在一起

  •  0
  • Seb  · 技术社区  · 6 年前

    今天我偶然发现了一个问题,我以前从来没有真正想过。我正在使用friendsofcake/crud插件,并尝试使用belongsto()关系更新实体,如下所示:

    class UsersTable extends Table {
    
         public function initilialize(array $config) 
         {
               $this->belongsTo('Organisations')
         ...
    

    有角度的客户打电话 GET /users/1 要检索以下数据:

    $data = [
        'id' = 1,
        'username' => 'kylekatarn',
        'organistion_id' => 1,
        'organisation' => [
            'id' => 1,
            'label' => 'The Empire'
        ]
     ]; 
    

    客户还有一份所有可用组织的列表 GET /organistaions :

    $organisations = [
        [
            'id' => 1,
            'label' => 'The Empire'
        ],[
            'id' => 2,
            'label' => 'Rebel Alliance'
        ]
    ] 
    

    现在Kyle Katarn对叛军联盟的缺陷和叛军舰队司令部用户数据库的角客户端发送这样的数据给我 PUT /users/1 :

    $data = [
        'id' => 1,
        'username' => 'kylekatarn',
        'organisation_id' => 1,
        'organisation' => [
            'id' => 2,
            'label' => 'Rebel Alliance'
        ]
    ];
    

    我的意图是用户kylekatarn应该从 organisation_id = 1 在组织对象中找到的新组织。出于某种原因,我认为这应该是开箱即用的,但是orm为organization添加了一个新条目。

    经过一番调查,我发现这个组织实体并没有将“id”设置为可访问。在我将“id”添加到可访问的实体成员列表中之后,一切正常。

    现在我的问题是,如果这是处理这些问题的好方法?设置id为accessible有什么缺陷吗?或者最好用 user.organisation_id 依我看?

    多谢!

    1 回复  |  直到 6 年前
        1
  •  1
  •   ndm    6 年前

    如果要将用户关联到不同的现有组织,则应更改相应的外键字段(IE)。 organisation_id 然后离开 organisation 如果没有包含标量值的字段,即使提交的值与现有值相同,它也会被标记为脏(这意味着它应该被保存)。

    你应该只修改 组织 如果您想更新当前关联的源代码记录(为此目的,您必须传递当前主键,并且它不必被设置为可用于该目的),或者如果您想创建一个新的组织并将其与用户关联。

    如果您想将用户关联到不同的现有组织,并在相同的保存操作中更新该组织,那就是当您遇到问题时,因为这将要求主键字段是可访问的(质量可分配的)。