2015-09-03 6 views
8

मेरे पास users तालिका है और businesses तालिका (users.user_id => business.user_id) के साथ एक-से-शून्य/एक संबंध है। मेरे users तालिका में मेरे पास एक भेदभावकर्ता है जो मुझे बताता है कि क्या उपयोगकर्ता प्रकार का व्यवसाय है और इसलिए मुझे businesses तालिका पर भी विवरण होना चाहिए।लार्वा कारखानों के लिए तर्क कैसे पारित करें?

मैं अपने उपयोगकर्ताओं को अपने कारखाने के साथ बनाना चाहता हूं जो वर्तमान में काम कर रहा है और फिर केवल व्यावसायिक विवरण बनाते हैं जहां भेदभावकर्ता व्यवसाय खाते को इंगित करता है।

मेरे दिमाग में तीन विकल्प हैं:

  1. का उपयोग कर उपयोगकर्ताओं को कारखाने से बनाएं और फिर '-> प्रत्येक()' discriminator पर कुछ जांच कर और एक कारखाने का उपयोग कर एक नया व्यापार उपयोगकर्ता पैदा करते हैं। हालांकि मैं व्यवसाय कारखाने को user_id पास नहीं कर सकता जिसे उपयोगकर्ता असाइन किया गया था।
  2. पहले उपयोगकर्ताओं को बनाएं। फिर मेरे बिजनेस बीडर में, उन सभी उपयोगकर्ताओं को पुनर्प्राप्त करें जो 'व्यवसाय' भेदभाव से मेल खाते हैं। फिर इन सभी उपयोगकर्ताओं के लिए एक कारखाना चलाता है जो व्यवसाय विवरण बनाता है। लेकिन फिर, मुझे किसी भी तरह से user_id व्यवसाय कारखाने user_id के साथ पहले से ही उपयोगकर्ता बनाने के user_id लिंक करना होगा।
  3. मेरे व्यापार कारखाने में, एक नया उपयोगकर्ता बनाएं और आईडी पुनर्प्राप्त करें, इस प्रकार users.user_id और business.user_id के बीच का लिंक बनाते हैं। हालांकि मैं user.user_type के लिए एक यादृच्छिक जनरेटर का उपयोग कर रहा हूं, भले ही मेरे पास businesses तालिका भर दी गई हो, यह उन उपयोगकर्ताओं के लिए हो सकती है जिनके पास भेदभावकर्ता 'व्यक्तिगत' है।

क्या कोई और तरीका है? क्या मैं अपने सेडर से कारखाने में तर्क पारित कर सकता हूं?

उत्तर

30

आपके द्वारा create फ़ंक्शन पर जाने वाले गुण आपके मॉडल परिभाषा कॉलबैक में दूसरे तर्क के रूप में पारित किए जाएंगे।

$business = factory(App\Business::class)->create(); 

factory(App\User::class, 5)->create([ 
    'business_id' => $business->id, 
]); 

अपनी आवश्यकताओं के इस अनुकूलन:


अपने मामले में आप भी उन विशेषताओं का उपयोग करने की, क्योंकि वे स्वचालित रूप से में विलय कर दिया हो जाएगा जरूरत नहीं है।

+0

मैं इसे कैसे याद कर सकता था। मैंने लाराकास्ट सबक देखा और मुझे खुद को सामान सेट करने के बारे में याद है। बेशक यह प्रलेखन में भी था: http://laravel.com/docs/master/testing#model- कारखानों। बहुत बहुत धन्यवाद। – Cristian

+0

@ क्रिस्टियन का लिंक अब पुराना दिखता है, 5.4 के लिए https://laravel.com/docs/5.4/database-testing#using- कारखानों को देखें और 'मौजूदा मॉडल' पर स्क्रॉल करें – morph

+0

इस तरह के बारे में क्या? '' 'php $ छात्र-> असाइनरोल ('छात्र'); '' स्पैटी/अनुमति –

संबंधित मुद्दे