Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Database/Eloquent/PendingHasThroughRelationship.php
Строк: 125
<?php

namespace IlluminateDatabaseEloquent;

use 
BadMethodCallException;
use 
IlluminateDatabaseEloquentRelationsHasMany;
use 
IlluminateSupportStr;

class 
PendingHasThroughRelationship
{
    
/**
     * The root model that the relationship exists on.
     *
     * @var IlluminateDatabaseEloquentModel
     */
    
protected $rootModel;

    
/**
     * The local relationship.
     *
     * @var IlluminateDatabaseEloquentRelationsHasMany|IlluminateDatabaseEloquentRelationsHasOne
     */
    
protected $localRelationship;

    
/**
     * Create a pending has-many-through or has-one-through relationship.
     *
     * @param  IlluminateDatabaseEloquentModel  $rootModel
     * @param  IlluminateDatabaseEloquentRelationsHasMany|IlluminateDatabaseEloquentRelationsHasOne  $localRelationship
     */
    
public function __construct($rootModel$localRelationship)
    {
        
$this->rootModel $rootModel;

        
$this->localRelationship $localRelationship;
    }

    
/**
     * Define the distant relationship that this model has.
     *
     * @param  string|(callable(IlluminateDatabaseEloquentModel): (IlluminateDatabaseEloquentRelationsHasOne|IlluminateDatabaseEloquentRelationsHasMany))  $callback
     * @return IlluminateDatabaseEloquentRelationsHasManyThrough|IlluminateDatabaseEloquentRelationsHasOneThrough
     */
    
public function has($callback)
    {
        if (
is_string($callback)) {
            
$callback fn () => $this->localRelationship->getRelated()->{$callback}();
        }

        
$distantRelation $callback($this->localRelationship->getRelated());

        if (
$distantRelation instanceof HasMany) {
            return 
$this->rootModel->hasManyThrough(
                
$distantRelation->getRelated()::class,
                
$this->localRelationship->getRelated()::class,
                
$this->localRelationship->getForeignKeyName(),
                
$distantRelation->getForeignKeyName(),
                
$this->localRelationship->getLocalKeyName(),
                
$distantRelation->getLocalKeyName(),
            );
        }

        return 
$this->rootModel->hasOneThrough(
            
$distantRelation->getRelated()::class,
            
$this->localRelationship->getRelated()::class,
            
$this->localRelationship->getForeignKeyName(),
            
$distantRelation->getForeignKeyName(),
            
$this->localRelationship->getLocalKeyName(),
            
$distantRelation->getLocalKeyName(),
        );
    }

    
/**
     * Handle dynamic method calls into the model.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    
public function __call($method$parameters)
    {
        if (
Str::startsWith($method'has')) {
            return 
$this->has(Str::of($method)->after('has')->lcfirst()->toString());
        }

        throw new 
BadMethodCallException(sprintf(
            
'Call to undefined method %s::%s()', static::class, $method
        
));
    }
}
Онлайн: 0
Реклама