0

我有以下迁移:

表:比比达斯:

class CreateBebidasTable extends Migration{

  public function up() {
    Schema::create('bebidas', function ($table) {
      $table->increments('id');
      $table->integer('tipo_id')->unsigned();
      $table->string('bebi_name');
      $table->string('bebi_size');
      $table->float('bebi_price');
      $table->timestamps();
      $table->foreign('tipo_id')->references('id')->on('tipobebidas');
    });
  }

  public function down() {
    Schema::drop('bebidas');
  }

}

表:tipobebidas

class CreateTiposBebidasTable extends Migration {

    public function up()
    {
        Schema::create('tipobebidas', function($table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('tipobebidas');
    }

}

这些是模型:

class Bebida extends Eloquent{

  public function TipoBebida() {
    return $this->belongsTo('TipoBebida');
  }

}


class TipoBebida extends Eloquent{

  protected $table = "tipobebidas";


  public function Bebidas() {
    return $this->hasMany('Bebida');
  }

}

每个Bebida(drink) 都有一个TipoBebida(drink type) 和 vive-versa。我正在尝试获得一个组合表,显示bebidas表和tipobebidas表中的所有字段。

基于 Laravel 关于eager loading的文档,我正在运行以下命令:

$bebidas = Bebida::with('tipobebida')->get();

此时$bebidas具有以下值:(我正在删除时间戳字段)

[
{"id":1,"bebi_name":"COCA-COLA","bebi_size":"1 litro",
 "bebi_price":4,"tipo_id":1,"tipobebida":null},
{"id":2,"bebi_name":"COCA ZERO","bebi_size":"1 litro",
 "bebi_price":4,"tipo_id":1,"tipobebida":null}
]

"tipobebida":null我期待的不是,而是表格内容"name":"refrigerantes"的某种表示形式。tipobebidas

我检查了正在运行的 SQL 命令,这里是:

select * from `tipobebidas` where `tipobebidas`.`id` in (?)

我怎样才能让它工作?

我将在几个嵌套foreach循环中使用这些数据来显示Bebida按类型分组的饮料TipoBebida

谢谢!

4

2 回答 2

2

我让它工作。这一切都归结为命名约定。

这是我所做的:

- nameforeign id field必须是name plussingular的name ,因此迁移更改为以下内容:table_idbebidas

class CreateBebidasTable extends Migration{

  public function up() {
    Schema::create('bebidas', function ($table) {
      $table->increments('id');
      $table->integer('tipobebida_id')->unsigned();  // ** new field name **
      $table->string('name');
      $table->string('size');
      $table->float('price');
      $table->timestamps();
    });
  }

  public function down() {
    Schema::drop('bebidas');
  }

}

另外,外键关系产生了一个 SQL 错误,试图修复它,仍然没有,所以我删除了以下行: $table->foreign('tipo_id')->references('id')->on('tipobebidas');

其他一切都保持不变。

急切的加载正在工作。

谢谢大家的帮助!!!

于 2013-09-20T21:57:05.067 回答
0

首先,在表 bebidas 和 tipobebidas 我看不到外键......我认为在 bebidas 你应该有tipobebidas_id 它是tipobebidas id 字段的外键。完成此操作后,将模型方法更改为:

class Bebida extends Eloquent{
  protected $table = "bebidas";

  public function TipoBebida() {
    return $this->belongsTo('TipoBebida', 'tipobebida_id');
  }

}

class TipoBebida extends Eloquent{

  protected $table = "tipobebidas";

  public function Bebidas() {
    return $this->hasMany('Bebida');
  }
于 2013-09-20T14:28:37.210 回答