2015-09-06 13 views
7

आप मॉडल फैक्ट्री में विदेशी कुंजी कैसे परिभाषित करते हैं।मॉडल कारखाने में लार्वेल 5.1 विदेशी कुंजी

$factory->define(App\Organisation::class, function ($faker) { 
    return [ 
     'name' => $faker->company, 
     'country_id' => 197, 
    ]; 
}); 

मेरी संगठनों तालिका बोने की मशीन में: उदाहरण के लिए मैं एक संगठनों मेज जिन देशों को मेज के लिए एक विदेशी कुंजी है है, अपने मॉडल कारखाने में मैं इस प्रकार देश आईडी के लिए एक डमी मूल्य को परिभाषित करने आ रही हैं कक्षा मैं निम्नलिखित कर रहा हूं लेकिन फेकर ऑब्जेक्ट मौजूद नहीं है - क्या मुझे अपने बीडर वर्ग में एक नया फ़कर ऑब्जेक्ट बनाने की आवश्यकता है?

use Illuminate\Database\Seeder; 

class OrganisationsTableSeeder extends Seeder 
{ 

    public function run() 
    { 
     $countryIds = Country::lists('id')->all(); 

     factory('App\Organisation', 3)->create([ 
     // override factory default 
     'country_id' => $faker->randomElement[$countryIds], 
    ]); 
    } 
} 

डाटाबेस बोने की मशीन वर्ग

class DatabaseSeeder extends Seeder 
{ 
    public function run() 
    { 

     Model::unguard(); 

     $this->call('CountriesTableSeeder'); 
     $this->call('OrganisationsTableSeeder'); 

     Model::reguard(); 
    } 
} 

क्या सबसे अच्छा तरीका है जब मॉडल कारखानों को परिभाषित करने के लिए विदेशी कुंजी परिभाषित करने के लिए? क्या मॉडल फैक्ट्री से देश_आईडी को छोड़ना और इसे बीजर वर्ग में जोड़ना संभव है - डॉक्यूमेंटेशन से ऐसा लगता है कि आप केवल मॉडल फैक्ट्री में परिभाषित मौजूदा मान को ओवरराइड कर सकते हैं लेकिन आप बीडर क्लास के माध्यम से एक नया मूल्य जोड़ नहीं सकते - सही मैं अगर मैं गलत हूँ?

उत्तर

2

मुझे इस पर थोड़ा देर हो सकती है लेकिन मुझे एक ही समस्या हो रही थी, यह मेरे लिए तय है। आप

$factory->define(App\Organisation::class, function ($faker) { 
    return [ 
     'name' => $faker->company, 
     'country_id' => factory(App\Country::class)->create()->id, 
    ]; 
}); 

और फिर अपने बीज में आप सिर्फ

factory(App\Organisation::class, 5)->create(); 

कॉल करने की आवश्यकता करने के लिए सक्षम होना चाहिए और यह रूप में अच्छी तरह से आप के लिए देशों का निर्माण करेगा।

+3

के साथ समस्या यह समाधान यह है कि प्रत्येक 'संगठन' के पास एक अलग देश होगा और यह कभी भी मौजूदा का उपयोग नहीं करेगा, है ना? –

+0

mmmmh, यह कुछ समय हो गया है क्योंकि मैंने यह कोड लिखा था, लेकिन आपका अवलोकन सही लगता है, हालांकि मैंने इसे लिखने के समय वास्तव में किसी मौजूदा देश का उपयोग करने की परवाह नहीं की थी। –

0

जिस तरह से लैरावेल टीम, ओटवेल, स्टॉफर et.al., सुझाव इस तरह है।

परीक्षण>Adding Relations To Models

Adding relationships to your models

ModelFactory.php

$factory->define(App\Organisation::class, function ($faker) { 
    return [ 
     'name' => $faker->company, 
     'country_id' => 197, 
    ]; 
}); 

$factory->define(App\Country::class, function ($faker) { 
    return [ 
     'name' => $faker->country, 
    ]; 
}); 

बोने की मशीन

$organisations = factory('App\Organisation', 3) 
    ->create() 
    ->each(function($$organisation) { 
     $organisation->relatedItems()->save(factory('App\Country')->make()); 
    }); 
संबंधित मुद्दे