在同一查询中使用范围和关系

时间:2015-04-08 10:06:02

标签: php laravel eloquent laravel-5

我很难在同一个查询中尝试使用Eloquent的Scope和Relationship元素。

我的201502_postcode表有一个gor列,在pc_gor_030315表中有一个外键查找。我最终想要在description表中返回/显示pc_gor_030315列。

我正在使用Scope,因为我的表名可能会改变。别担心这里。我已经有了代码来做到这一点。为简单起见,我调用了表201502_postcodepc_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);
     }  
  }

1 个答案:

答案 0 :(得分:0)

让我们来看看你的第一个范围。

fromTable范围可在Eloquent Class PostcodeExtract中找到。

因此,PostcodeExtract::fromTable('201502_postcode')完美无缺。

至于你的第二个范围lookupTable,它可以在Eloquent Class GorLookup中找到。

因此,应使用GorLookup::lookupTable调用它。

但是,在您的代码中,您在范围lookupTable的对象上链接范围PostcodeExtract,因此它肯定无法正常工作。

<强>解决方案:

lookupTable范围放在PostcodeExtract类本身。