laravel源码之Eloquent之hasMay(first:related,foreignKey,localKey)

hasMay(first:related,foreignKey,localKey)
三个参数一个是关联模型类,需要传递完整路径,外键(传递模型的表中),自己的主键

    function tap($value, $callback = null)
    {
        //是否具有回调函数,无则返回HigherOrderTapProxy类的实例化
        if (is_null($callback)) {
            return new HigherOrderTapProxy($value);
        }
        //
        $callback($value);

        return $value;
    }

    //回调函数
    function ($instance) 
    {
        if (! $instance->getConnectionName()) {
            $instance->setConnection($this->connection);
        }
    }
    public function hasMany($related, $foreignKey = null, $localKey = null)
    {
        //实例化表的连接
        $instance = $this->newRelatedInstance($related);
        //获取外键,默认    表名加“_id”
        $foreignKey = $foreignKey ?: $this->getForeignKey();
        //获取自己表的相应键,默认id
        $localKey = $localKey ?: $this->getKeyName();

        return $this->newHasMany(
            $instance->newQuery(), $this, $instance->getTable().'.'.$foreignKey, $localKey
        );
    }


    protected function newRelatedInstance($class)
    {    //
        return tap(new $class, function ($instance) {
            if (! $instance->getConnectionName()) {
                $instance->setConnection($this->connection);
            }
        });
    }

    
class HigherOrderTapProxy
{
    /**
     * The target being tapped.
     *
     * @var mixed
     */
    public $target;

    /**
     * Create a new tap proxy instance.
     *
     * @param  mixed  $target
     * @return void
     */
    public function __construct($target)
    {
        $this->target = $target;
    }

    /**
     * Dynamically pass method calls to the target.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        $this->target->{$method}(...$parameters);

        return $this->target;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值