josef/postgre-comma-relations

用于创建具有以逗号分隔的外键的Eloquent关系,或者使用string_to_array postgre函数。

dev-master 2022-09-03 12:13 UTC

This package is auto-updated.

Last update: 2024-09-30 01:30:32 UTC


README

设置与包含逗号分隔值的表的外键的eloquent关系

安装

使用composer获取包

composer require josef/postgre-comma-relations

1.

您必须扩展Josef\Model类,而不是Illuminate\Database\Eloquent\Model

<?php

namespace App;

use Josef\Model;

class Test extends Model
{
    //
}

您也可以使用特性而不是扩展Model类

类似于Laravel,Users模型没有扩展Model类。因此,您可以使用traitJosef\FindInSet\FindInSetRelationTrait

示例

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Josef\FindInSet\FindInSetRelationTrait;

class User extends Authenticatable
{
    use Notifiable, FindInSetRelationTrait;

    public function city ()
    {
        return $this->FindInSetOne( 'App\City', 'city_ids', 'id', 1);
    }

    public function state ()
    {
        return $this->FindInSetOne( 'App\State', 'city_ids', 'id', 2);
    }

    public function country ()
    {
        return $this->FindInSetOne( 'App\Country', 'city_ids', 'id', 3);
    }

    public function hobbies ()
    {
        return $this->FindInSetMany( 'App\Hobbies', 'hobbies_id', 'id');
    }

}

要创建HasMany关系,您必须这样写

public function order_product (){
    return $this->FindInSetMany( CLASS_NAME, FOREIGN_KEY, LOCAL_KEY);
}

要创建HasOne关系,您必须这样写

public function order_product (){
    return $this->FindInSetOne( CLASS_NAME, FOREIGN_KEY, LOCAL_KEY);
}

您也可以传递第四个参数来检测FIND_IN_SET中的位置

如果您有一个address表模式和存储city_idscity_id,state_id,country_id

现在,您想找到仅有的city_id,您将这样做: select * from address where FIND_IN_CITY( 2, city_ids ) = 1;// 这里 $index = 1

对于state_idselect * from address where FIND_IN_CITY( 1, city_ids ) = 2;// 这里 $index = 2

对于country_idselect * from address where FIND_IN_CITY( 5, city_ids ) = 3;// 这里 $index = 3

第四个参数是可选的

public function order_product (){
    return $this->FindInSetMany( CLASS_NAME, FOREIGN_KEY, LOCAL_KEY, Number);
}