संपत्ति [शीर्षक] इस संग्रह उदाहरण पर मौजूद नहीं है


99

मैं लारकोस्ट के वीडियो का अनुसरण कर रहा हूं: बेसिक मॉडल / कंट्रोलर / व्यूफ्लो ।

मेरे पास एक टेबल होल्ड संपर्क जानकारी है।

CREATE TABLE `about` (
`id` int(10) UNSIGNED NOT NULL,
`title` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
`content` text COLLATE utf8_unicode_ci,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

मैं नियंत्रक फ़ाइल में निम्नलिखित कोड का उपयोग करके देखने के लिए डेटा पास करने का प्रयास कर रहा हूं:

public function index()
{
    $about = Page::where('page', 'about-me')->get(); //id = 3

    return view('about', compact('about'));
}

जब मैं नीचे दिखाए अनुसार कोड दिखाने की कोशिश करता हूं,

@section('title')
    {{$about->title}}
@stop

@section('content')
    {!! $about->content !!}
@stop

मुझे वह त्रुटि मिलती है जो कहती है:

संपत्ति [शीर्षक] इस संग्रह उदाहरण पर मौजूद नहीं है। (देखें: E: \ laragon \ www \ newsite \ resource \ views \ about.blade.php)

लेकिन अगर मैं नियंत्रक फ़ाइल में पुनर्प्राप्ति विधि को बदलता हूं, तो यह काम करता है।

public function index()
{
    $about = Page::find(3);

    return view('about', compact('about'));
}

जब मैं dd($about)पहले मामले ( where()->get()) में उपयोग करता हूं , तो डेटा एक सरणी द्वारा समझाया जाता है। दूसरे मामले में ( find(3)) यह अपेक्षित रूप से डेटा प्रदर्शित करता है।

मैं क्या गलत कर रहा हूं?

जवाबों:


242

जब आप उपयोग कर रहे हों तो आपको get()एक संग्रह मिलता है । इस मामले में आपको गुण प्राप्त करने के लिए उस पर पुनरावृति करने की आवश्यकता है:

@foreach ($collection as $object)
    {{ $object->title }}
@endforeach

या आप इसे अनुक्रमणिका द्वारा केवल एक वस्तु प्राप्त कर सकते हैं:

{{ $collection[0]->title }}

या संग्रह से पहली वस्तु प्राप्त करें:

{{ $collection->first() }}

जब आप उपयोग कर रहे हैं find()या first()आपको कोई वस्तु मिलती है , तो आप सरल के साथ गुण प्राप्त कर सकते हैं:

{{ $object->title }}

हाँ, निष्पादित करने के बाद Model-> get () एक वस्तु के साथ एक सूची प्राप्त करते हैं, इस कारण से हमेशा डेटा दिखाते हैं और मैं उस तक नहीं पहुँच सकता। पहले एक्साइट करने के बाद () तब ऑब्जेक्ट मिलता है
Ruben Ruíz

4
लारवेल डॉक्यूमेंटेशन को खोजने, पढ़ने और परीक्षण करने और स्टैकओवरफ़्लो प्रश्नों / उत्तरों के बहुत से स्थानों पर जाने के 4 घंटों के बाद, आप केवल एक ही थे जिसका उल्लेख किया गया है () एक संग्रह को पुनः प्राप्त करता है। यह आप थे जिन्होंने मुझे कुर्सी से कूद दिया और महसूस किया कि मेरे सभी प्रश्न सही थे। समस्या "प्रिंट" पर थी। मेरे दिल के नीचे से, इस जवाब के लिए एक बड़ा धन्यवाद! वास्तव में मेरा मतलब यह था!
ग्रिनेक्स।

23

get()विधि के साथ आपको एक संग्रह मिलता है (सभी डेटा जो क्वेरी से मेल खाते हैं), first()इसके बजाय उपयोग करने का प्रयास करें , यह केवल एक तत्व देता है, जैसे:

 $about = Page::where('page', 'about-me')->first();

2
$about = DB::where('page', 'about-me')->first(); 

निरंतर में get()

यह मेरे प्रोजेक्ट पर काम करता है । धन्यवाद।


3
हालांकि यह लेखकों के प्रश्न का उत्तर दे सकता है, लेकिन इसमें कुछ स्पष्ट शब्दों और / या प्रलेखन के लिंक का अभाव है। रॉ कोड स्निपेट्स उनके आसपास कुछ वाक्यांशों के बिना बहुत उपयोगी नहीं हैं। आप यह भी पा सकते हैं कि कैसे एक अच्छा उत्तर लिखने में बहुत मददगार है। कृपया अपना उत्तर संपादित करें
निक

1

आपको नियंत्रक में संग्रह कीवर्ड का उपयोग करना चाहिए। जैसे यहाँ..

public function ApiView(){
    return User::collection(Profile::all());
}

यहां, उपयोगकर्ता संसाधन नाम है और प्रोफ़ाइल मॉडल नाम है। धन्यवाद।


1

एक व्यक्ति को कारखाने के कार्यों के साथ काम करते समय यह मिल सकता है, इसलिए मैं पुष्टि कर सकता हूं कि यह वैध सिंटैक्स है:

$user = factory(User::class, 1)->create()->first();

यदि आप कुछ ऐसा करते हैं तो आपको संग्रह आवृत्ति त्रुटि दिखाई दे सकती है:

$user = factory(User::class, 1)->create()->id;

इसलिए इसे इसमें बदलें:

$user = factory(User::class, 1)->create()->first()->id;

0

$about->first()->idया $stm->first()->titleआपकी समस्या हल हो गई है।


मेरा कोड सुझाव टिंकर पर काम करता है, लेकिन परियोजना पर नहीं।
ओनायश एड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.