0

私は2つのテーブルを持っています:

use Illuminate\Database\Migrations\Migration;

class CreateTransactionsTable extends Migration {

        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
                Schema::create('transactions', function($table) {
                        $table->increments('id');
                        $table->bigInteger('amount');
                        $table->integer('from');
                        $table->integer('to');
                        $table->integer('type');
                        $table->timestamps();
                });

                Schema::create('transaction_types', function($table) {
                        $table->increments('id');
                        $table->string('name');
                });
        }

        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
                Schema::dropIfExists('transactions');
                Schema::dropIfExists('transaction_types');
        }
}

_

// app/models/Transactiones.php
class Transaction extends Eloquent {
        public function type()
        {
                return $this->belongsTo('TransactionType');
        }
}

_

// app/models/TransactionTypes.php
class TransactionType extends Eloquent {
        public function Transactions()
        {
                return $this->hasMany('Transaction', 'type');
        }
}

transaction_types に (1, 'deposit') をシードしました。今、トランザクションを作成しており、type の FK を transaction_types の ID に設定したいと考えています。

(以下のコードは動作しません..)

if (0 == Transaction::where('from', $tmpData->refID)->count()) {
        $t = new Transaction();
        $t->amount = $tmpData->amount;
        $t->from = $tmpData->refID;
        $t->to = $tmpData->ownerID1;

        // fails
        $t->type = TransactionType::find(1); // desposit

        // fails
        //$t->types()->insert(TransactionType::find(1)); // desposit

        // If it I do it this way it DOES work, but this seems backwards
        //TransactionType::find(1)->Transactions()->save($t);

        $t->save();
}

私は何を間違っていますか?これは単純なルックアップ テーブルなので、完了したら、単純に $transaction->type()->name を実行して名前を表示できます。

また、私は非常に新しい Laravel であるため、より良いコードに関する提案は大歓迎です。

4

1 に答える 1

0

後方ではありません。これは、雄弁を使用してやりたいことを行う正しい方法です。

$type = TransactionType::find(1);

$type->transactions()->save(new Transaction(array(
    'amount' => $tmpData->amount,
    'from'   => $tmpData->refID,
    'to'     => $tmpData->ownerID1
)));
于 2013-11-06T20:51:08.970 に答える