اررور Illegal string offset 'imageThumb'

3 سال پیش
توسط داریوش آپدیت شد
داریوش ( 125 تجربه )
3 سال پیش

سلام دوستان
من به اررور خوردم که توی سرچم تا حالا به نتیجه ای نرسیدم اگر کسی میتونه کمک کنه ممنون میشم.ارروری که دارم :
Illegal string offset 'imageThumb' هست.به این صورت که توی یه کنترلرم توی یکی از if هام از queru builder استفاده کردم و در یک if دیگر از elequent. توی foreach من در view تا زمانی که از elequent استفاده میشه و تغذیه میکنه ارروری ندارم اما وقتی از خروجی query builder استفاده میکنم دیتا ها به درستی بر میگرده اما نمیتونه توی foreach بره و این اررور بالا رو میده تو خروجی ها هم در زیر آوردم:
خروجی elquent :

attributes: array:15 [▼

      "id" => 12
      "national_id" => 961010002
      "   "color" => "dfdfd"
      "personal_signs" => "sdcfdg"
      "image" => "{"1":"\/upload\/images\/2017\/home2-2-269x408.jpg","imageThumb":"\/upload\/images\/2017\/home2-2-269x408.jpg"}"

خروجی query bulder:

items: array:3 [▼

  0 => {#354 ▼
    +"id": 12
    +"name": "sdfsdf"
    +"date_of_birth": "2017-09-12"
    +"image": "{"1":"\/upload\/images\/2017\/home2-2-269x408.jpg","imageThumb":"\/upload\/images\/2017\/home2-2-269x408.jpg"}"
    +"personal_signs": "sdcfdg"
    +"stateId": 18
  }

لطفا اگر کسی میتونه کمک کنه.ممنونم.

بهترین پاسخ انتخاب شده توسط داریوش
حسام موسوی
3 سال پیش

با توجه به ارور اولی و کد بعدتون باید بگم مقدار imageThumb شما بصورت یک استرینگ هست ولی شما میتوایند بصورت یک آرایه به ایتم های توش دسترسی پیدا کنید و همین موضوع باعث مشکلتون شده
شما باید از ترفند serialize برای تبدیل استرینگ به آرایه استفاده کنید منظورم مقدار زیر هست

+"image": "{"1":"\/upload\/images\/2017\/home2-2-269x408.jpg","imageThumb":"\/upload\/images\/2017\/home2-2-269x408.jpg"}"

برای تبدیل کردن به آرایه هم در مدل مربوطه که این اطلاعات رو بر میگردونه کد زیر رو قرار بدید

    protected $casts = [
        'image' => 'array', // Will convarted to (Array)
    ];
حسام موسوی ( 365336 تجربه )
3 سال پیش
تخصص : طراح و برنامه نویس

شما باید کدتون رو قرار بدید تا بشه متوجه شد.

داریوش ( 125 تجربه )
3 سال پیش

بله حتما

کنترلر مربوطه:

public function introducing(Animal $animals){

        if(request('state_id') and !empty(request('state_id'))) {
            $animals=DB::table('animal')
                ->join('animal_user', 'animal_user.animal_id', '=', 'animals.id')
                ->join('users', 'users.id', '=', 'animal_user.user_id')
                ->join('areas', 'areas.id', '=', 'users.area_id')
                ->join('cities', 'cities.id', '=', 'areas.city_id')
                ->join('states', 'states.id', '=', 'cities.state_id')
                ->select('animals.id','animals.name','animals.date_of_birth','animals.image','animals.personal_signs','states.id as stateId')
                ->where('states.id','=',request('state_id'));
        }

        if(request('sub_type') and !empty(request('sub_type')) ) {
            $animals = $animals->where('sub_type',request('sub_type'));
        }

        if(request('race') and !empty(request('race')) ) {
            $animals = $animals->where('race',request('race'));
        }

        $animals=$animals->paginate(6);

        if(auth()->user())
        {
            $user=User::whereId(auth()->user()->id)->first();
            return view('site.pages.introducing-animals', compact('user','animals'));
        }else
        {
            return view('site.pages.introducing-animals',compact('animals'));
        }

        if(request('area_id') or request('sub_type') or request('race')) {
            $animals = $animals->getAnimalSearchFildes(request('area_id'),request('sub_type'),request('race'));
        }
    }

viwe مربوطه :

@foreach($animals as $animal)

                    @if($animal==[])
                        <center><a style="color: #9c3328;"></a>نتیجه ای یافت نشد!</center>
                    @else
                    <div class="cell-md-4">
                        <!-- Thumbnail boxed vertical-->
                        <div class="thumbnail-boxed thumbnail-boxed-vertical">
                            <a href="/animal/{{$animal->id}}">
                                <div class="thumbnail-boxed-left"><img class="thumbnail-boxed-image" src="@if($animal->image['imageThumb']!=""){{$animal->image['imageThumb']}}@else images/site/animals/no-image.png @endif" alt="" width="370" height="240"/>
                                </div>
                                <div class="thumbnail-boxed-body">
                                    <p class="thumbnail-boxed-title"><a href="{{route('profileAnimal',['id'=>$animal->id])}}">{{str_limit($animal->name,14)}}</a></p>
                                    <div class="thumbnail-boxed-text">
                                        <p>@if($animal->personal_signs){{str_limit($animal->personal_signs,50)}}@endif</p>
                                    </div>
                                    <div class="thumbnail-boxed-footer">
                                        <ul class="thumbnail-boxed-meta">
                                            <li><span class="icon icon-xs icon-tan-hide material-icons-event_available"></span><span>{{\App\Helpers\General::calculate_age_animal($animal->date_of_birth)}}</span></li>
                                            <li><span class="icon icon-xs icon-tan-hide material-icons-library_add"></span><span>{{\App\Animal::getCountWishList($animal->id)}} نفر</span></li>
                                            <li><span class="icon icon-xs icon-tan-hide material-icons-place"></span><span>@if(\App\Animal::getLocationAnimal($animal->id)){!! \App\Animal::getLocationAnimal($animal->id)!!} @else ثبت نشده است @endif</span></li>
                                        </ul>
                                    </div>
                                </div>
                            </a>
                        </div>
                    </div>
                    @endif
                @endforeach
حسام موسوی ( 365336 تجربه )
3 سال پیش
تخصص : طراح و برنامه نویس

با توجه به ارور اولی و کد بعدتون باید بگم مقدار imageThumb شما بصورت یک استرینگ هست ولی شما میتوایند بصورت یک آرایه به ایتم های توش دسترسی پیدا کنید و همین موضوع باعث مشکلتون شده
شما باید از ترفند serialize برای تبدیل استرینگ به آرایه استفاده کنید منظورم مقدار زیر هست

+"image": "{"1":"\/upload\/images\/2017\/home2-2-269x408.jpg","imageThumb":"\/upload\/images\/2017\/home2-2-269x408.jpg"}"

برای تبدیل کردن به آرایه هم در مدل مربوطه که این اطلاعات رو بر میگردونه کد زیر رو قرار بدید

    protected $casts = [
        'image' => 'array', // Will convarted to (Array)
    ];
داریوش ( 125 تجربه )
3 سال پیش

بسایر عالی.خیلی خیلی ممنونم از کمکتون جناب موسوی.
یه نکته دیگه که باز من مد نظر قرار نداده بودم این هست که باید query هایی که از ساختار query bulider استفاده میشه برای اینکه این روش جوابگو باشد یعنی :

protected $casts = [  
'image' => 'array', // Will convarted to (Array)  
];  

باید در خورد مدل query زده شود نه در کنترلر
خیلی خیلی ممنون از مهندس موسوی

برای ارسال پاسخ باید وارد سایت شوید