雄辩的关系

时间:2015-04-08 15:36:11

标签: php laravel laravel-5

为什么我会为这种简单的关系查询收到此错误?

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

我只想从查询表中获取一个名为pc_country的查找值列表。我甚至包括名称空间!

控制器;

$tableName = $postcode_tablename->dataset; //eg 201502_postcode

$country = PostcodeExtract::fromTable($tableName)
                        ->country() //this is generating the error!
                        ->distinct()
                        ->select('description')
                        ->get();

var_dump($country);
exit;

国家模式;

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Country extends Model {

  protected $connection = 'postcodes';

  public $table = 'pc_country';

  protected $fillable = ['description', 'country_id', 'code'];

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

PostCode Extract Model;

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class PostcodeExtract extends Model {

protected $connection = 'postcodes';

protected $fillable = ['country'];

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

  public function country()
  {
    return $this->belongsTo('App\Model\Country');
  }
}

我的201502_postcode表格有country_id,我的pc_country表格有一个id字段供您查询。那是对的吗?我没有看到问题...

1 个答案:

答案 0 :(得分:0)

您使用了fromTable方法(范围),它返回了雄辩的查询构建器,因此您的关系将无法使用。在不调用该方法的情况下考虑相同的代码。

如果要更改模型表创建实例,然后在创建的实例上调用setTable方法,则使用实例查询

$instance = new PostCodeExtract();
$instance->setTable ("table");
$country = $instance->country()->........

很抱歉,我在移动设备上无法提供良好的示例代码,但您可以使用此方法实现该目标