اررور Illegal string offset 'imageThumb'

4 سال پیش توسط داریوش مطرح شد
آفلاین
user-avatar
داریوش ( 125 تجربه )
4 سال پیش

لینک کوتاه اشتراک گذاری

1

سلام دوستان
من به اررور خوردم که توی سرچم تا حالا به نتیجه ای نرسیدم اگر کسی میتونه کمک کنه ممنون میشم.ارروری که دارم :
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
  }

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

بهترین پاسخ
آفلاین
user-avatar
حسام موسوی
4 سال پیش

با توجه به ارور اولی و کد بعدتون باید بگم مقدار 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)
    ];
آفلاین
user-avatar
حسام موسوی ( 460745 تجربه )
4 سال پیش
تخصص : طراح و برنامه نویس

لینک کوتاه اشتراک گذاری

0

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

آفلاین
user-avatar
داریوش ( 125 تجربه )
4 سال پیش

لینک کوتاه اشتراک گذاری

0

بله حتما

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

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
آفلاین
user-avatar
حسام موسوی ( 460745 تجربه )
4 سال پیش
تخصص : طراح و برنامه نویس

لینک کوتاه اشتراک گذاری

0

با توجه به ارور اولی و کد بعدتون باید بگم مقدار 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)
    ];
آفلاین
user-avatar
داریوش ( 125 تجربه )
4 سال پیش

لینک کوتاه اشتراک گذاری

0

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

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

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

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.