2017-07-04 38 views
0

我試圖建立一個模型廠Laravel 5.4以下關係:多層次模型廠的關係在Laravel 5.4

基金
-----認購
------- ----訂戶

每個基金都有很多訂閱,而且每個訂閱者也有很多訂閱。訂閱屬於基金,也屬於訂閱者。

我想在Laravel(雄辯)中建立一個模型工廠來完成單個播種機中的這種關係。以下是我迄今爲止:

應用程序\基金

public function subscriptions() 
{ 
    return $this->hasMany('App\Subscription'); 
} 

public function subscribers() 
{ 
    return $this->hasMany('App\Subscriber'); 
} 

應用程序\認購

public function subscriber() 
{ 
    return $this->belongsTo('App\Subscriber'); 
} 

public function fund() 
{ 
    return $this->belongsTo('App\Fund'); 
} 

應用程序\用戶

public function subscriptions() 
{ 
    return $this->hasMany('App\Subscription'); 
} 

廠爲\軟件\基金

$factory->define(App\Fund::class, function (Faker\Generator $faker) { 
return [ 
    'code' => strtoupper($faker->lexify('?????')).$faker->numberBetween('10000', '99999'), 
    'name' => $faker->text('45'), 
    'status' => 'Active', 
    'currency' => $faker->currencyCode(), 
    'location' => $faker->country(), 
    'redeemable' => $faker->boolean(50), 
    'interest_rate' => $faker->randomFloat(2, 0, 0.99), 
    'interest_frequency' => 'Quarterly', 
    'management_fee' => $faker->randomFloat(2, 0, 0.99), 
    'inclusion_rate' => $faker->randomFloat(2, 0, 0.99), 
    'notes' => $faker->sentences(6, TRUE), 
]; 
}); 

廠爲\軟件\認購

$factory->define(App\Subscription::class, function (Faker\Generator $faker) { 
return [ 
    'code' => $faker->numberBetween('10000', '99999'), 
    'amount' => $faker->randomFloat(2, 2000, 18000), 
    'purchase_price' => $faker->randomFloat(2, 5, 25), 
    'qty_purchased' => $faker->randomFloat(4, 1000, 20000), 
    'date' => date("Y-m-d H:i:s"), 
]; 
}); 

廠爲\軟件\用戶

$factory->define(App\Subscriber::class, function (Faker\Generator $faker) { 
return [ 
    'name' => $faker->name, 
    'email' => $faker->freeEmail, 
    'phone' => $faker->phoneNumber, 
    'fax' => $faker->phoneNumber, 
    'address' => $faker->address, 
]; 
}); 

FundSeeder.php

public function run() 
{ 
    factory(App\Fund::class, 15)->create()->each(function ($u) { 
     $u->subscriptions()->save(factory(App\Subscription::class)->make()); 
     $u->subscribers()->save(factory(App\Subscriber::class)->make()); 
    }); 
} 

然而,當我運行php artisan db:seed,返回以下錯誤:

http://i.imgur.com/FFt6gFt.png

這是正確的,但是,因爲我不想對認購表fund_id值。基金有很多訂閱,而訂閱者有很多訂閱。

真正的問題是,我無法弄清楚如何一次創建所有三個模型而不會導致錯誤。

這將是有意義的,對我來說,要做到這一點:

public function run() 
{ 
    factory(App\Fund::class, 2)->create()->each(function ($u) { 
     $u->subscriptions()->save(factory(App\Subscription::class)->make({ 
      $u->subscribers()->save(factory(App\Subscriber::class)->make()); 
     })); 

    }); 
} 

然而,這導致Syntax Error - Unexpected {

你如何建議我繼續?

回答

0

它不是很清楚如何使你的關係設置,但是從我的理解需要被添加到訂閱用戶,所以這可能做到這一點:

public function run() 
{ 
    factory(App\Fund::class, 15)->create()->each(function ($u) { 
     $u->subscriptions()->save(factory(App\Subscription::class)->make()); 
     $subscription = App\Subscription::latest()->get()->last(); 
     $subscription->subscribers()->save(factory(App\Subscriber::class)->make()); 
    }); 
} 
+0

我在原來的問題加我的模型 - 請參閱帖子的頂部以作進一步澄清。儘管我確實感覺自己在嘗試使用某些方法,但嘗試使用方法會導致以下錯誤[BadMethodCallException]調用未定義的方法Illuminate \ Database \ Query \ Builder :: save() – chillyner