我很难在同一个查询中尝试使用Eloquent的Scope和Relationship元素。
我的201502_postcode
表有一个gor
列,在pc_gor_030315
表中有一个外键查找。我最终想要在description
表中返回/显示pc_gor_030315
列。
我正在使用Scope,因为我的表名可能会改变。别担心这里。我已经有了代码来做到这一点。为简单起见,我调用了表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 :(得分:0)
让我们来看看你的第一个范围。
fromTable
范围可在Eloquent Class PostcodeExtract
中找到。
因此,PostcodeExtract::fromTable('201502_postcode')
完美无缺。
至于你的第二个范围lookupTable
,它可以在Eloquent Class GorLookup
中找到。
因此,应使用GorLookup::lookupTable
调用它。
但是,在您的代码中,您在范围lookupTable
的对象上链接范围PostcodeExtract
,因此它肯定无法正常工作。
<强>解决方案:强>
将lookupTable
范围放在PostcodeExtract
类本身。