4.4.8 模型关联

一对一:表与表之间各自只有一条数据相互关联

  • hasOne():一般用于主表
  • belongsTo():一般用于子表
<?php
namespace App\Model;

use Hyperf\Database\Model\SoftDeletes;
use Hyperf\DbConnection\Model\Model;

/**
 * @property int $id
 * @property string $merchant_no
 * @property string $title
 * @property string $desc
 * @property int $status
 * @property string $meta
 * @property string $cdn_addr
 * @property \Carbon\Carbon $created_at
 * @property \Carbon\Carbon $updated_at
 * @property string $deleted_at
 */
class UserActivity extends Model
{
    /**
     * 表名
     * @var string
     */
    protected $table = 'user_activity';

    ...

    /**
     * 将活动下面的事件一对一关联
     * @return \Hyperf\Database\Model\Relations\HasOne
     */
    public function event()
    {
        return $this->hasOne(UserActivityEvent::class, 'activity_id', 'id');
    }
}
<?php
namespace App\Controller;

class IndexController extends AbstractController
{
    public function index()
    {
        // 查询出活动信息
        $userActivity = \App\Model\UserActivity::query()->find(10012);
        // 加载活动下的事件,并且一对一关联
        $userActivity->load('event');
        return $userActivity;
    }
}

输出:
{
    "id": 10012,
    "merchant_no": "123456",
    "title": "title",
    "desc": "",
    "status": 2,
    "meta": {
        "cover_pic": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591770047788&di=8efc808496c85415054dae40e1a7f06a&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F56%2F12%2F01300000164151121576126282411.jpg",
        "share_pic": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591770047788&di=8efc808496c85415054dae40e1a7f06a&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F56%2F12%2F01300000164151121576126282411.jpg",
        "rule": "rule"
    },
    "cdn_addr": null,
    "created_at": "2020-06-10 13:06:50",
    "updated_at": "2020-06-17 14:40:39",
    "deleted_at": "2020-06-17 14:40:39",
    // 下面的就是加载出来的事件内容
    "event": {
        "id": 200001,
        "merchant_no": "123456",
        "activity_id": "10012",
        "title": "222222111",
        "start_time": "2020-06-12 00:00:00",
        "end_time": "2020-07-20 23:59:59",
    }
}

一对多:某张表关联了另外一张表的多条记录

  • hasMany()
    `php
    <?php
    namespace App\Model;

use Hyperf\Database\Model\SoftDeletes;
use Hyperf\DbConnection\Model\Model;

/**

  • @property int $id

  • @property string $merchant_no

  • @property string $title

  • @property string $desc

  • @property int $status

  • @property string $meta

  • @property string $cdn_addr

  • @property \Carbon\Carbon $created_at

  • @property \Carbon\Carbon $updated_at

  • @property string $deleted_at
    /
    class UserActivity extends Model
    {
    /*

    • 表名

    • @var string
      */
      protected $table = ‘user_activity’;

      /**

    • 将活动下面的事件一对多关联

    • @return \Hyperf\Database\Model\Relations\HasMany
      */
      public function events()
      {
      return $this->hasMany(UserActivityEvent::class, ‘activity_id’, ‘id’);
      }
      }
      `

<?php
namespace App\Controller;

class IndexController extends AbstractController
{
    public function index()
    {
        // 查询出活动信息
        $userActivity = \App\Model\UserActivity::query()->find(10012);
        // 加载活动下的事件,并且一对多关联
        $userActivity->load('events');
        return $userActivity;
    }
}

输出
 {
    "id": 10012,
    "merchant_no": "123456",
    "title": "title",
    "desc": "",
    "status": 2,
    "meta": {
        "cover_pic": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591770047788&di=8efc808496c85415054dae40e1a7f06a&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F56%2F12%2F01300000164151121576126282411.jpg",
        "share_pic": "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1591770047788&di=8efc808496c85415054dae40e1a7f06a&imgtype=0&src=http%3A%2F%2Fa0.att.hudong.com%2F56%2F12%2F01300000164151121576126282411.jpg",
        "rule": "rule"
    },
    "cdn_addr": null,
    "created_at": "2020-06-10 13:06:50",
    "updated_at": "2020-06-17 14:40:39",
    "deleted_at": "2020-06-17 14:40:39",
    // 下面的就是加载出来的事件内容
    "events": [
        {
            "id": 200001,
            "merchant_no": "123456",
            "activity_id": "10012",
            "title": "222222111",
            "start_time": "2020-06-12 00:00:00",
            "end_time": "2020-07-20 23:59:59",
        },
    ]
}
文档更新时间: 2021-09-24 17:36   作者:赵豪