2015-04-08 4 views
0

Мне очень трудно пытаться использовать элементы «Сфера» и «Отношения» в одном и том же запросе.Использование области и отношений внутри одного и того же запроса

В таблице 201502_postcode есть столбец gor, который имеет внешний ключ в таблице pc_gor_030315. В конечном итоге я хочу вернуть/отобразить столбец description в пределах pc_gor_030315 таблицы.

Я использую область действия, потому что имена моих таблиц могут измениться. Не беспокойтесь об этом. У меня уже есть код для этого. Для простоты я назвал таблицы 201502_postcode и pc_gor_030315.

В настоящий момент я получаю следующее сообщение об ошибке;

Call to undefined method Illuminate\Database\Query\Builder::lookupTable() 

Это мой контроллер;

$list = PostcodeExtract::fromTable('201502_postcode') 
         ->lookupTable('pc_gor_030315') 
         ->distinct() 
         ->select('description') 
         ->get(); 

var_dump($list); 

Это моя PostcodeExtract модель;

<?php namespace App\Models; 
    use Illuminate\Database\Eloquent\Model; 

    class PostcodeExtract extends Model { 

    protected $connection = 'postcodes'; 

    public function scopeFromTable($query, $tableName) 
    { 
    return $query->from($tableName); 
    } 

    public function gorLookup() 
    { 
    //'oldcode' is the local key 
    return $this->belongsTo('App\Model\GorLookup', 'oldcode'); 
    } 
    } 

И вот мой GorLookup;

<?php namespace App\Models; 

    use Illuminate\Database\Eloquent\Model; 

    class GorLookup extends Model { 

    protected $connection = 'postcodes'; 

    protected $fillable = array('description', 'oldcode'); 

    public function postcodeExtract() 
    { 
     return $this->hasMany('App\Models\PostcodeExtract', 'oldcode'); 
    } 

    public function scopeLookupTable($query, $lookupTable) 
    { 
     return $query->join($lookupTable); 
    } 
    } 

ответ

0

Давайте посмотрим на ваш первый прицел.

fromTable область применения находится в Eloquent Class PostcodeExtract.

Следовательно, PostcodeExtract::fromTable('201502_postcode') работает отлично.

Что касается вашего второго прицела lookupTable, его можно найти в Eloquent Class GorLookup.

Следовательно, его следует называть GorLookup::lookupTable.

Однако в вашем коде вы цепляете область lookupTable на объект класса PostcodeExtract, так что это определенно не сработает.

Решение:

Поместите lookupTable сфера в самом PostcodeExtract классе.

Смежные вопросы