داریوش
7 سال پیش توسط داریوش مطرح شد
4 پاسخ

اررور Illegal string offset 'imageThumb'

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

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


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 7 سال پیش مطرح شد
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)
    ];

حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 7 سال پیش مطرح شد
0

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


داریوش
@dariush.m1992 7 سال پیش مطرح شد
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

حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 7 سال پیش مطرح شد
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)
    ];

داریوش
@dariush.m1992 7 سال پیش آپدیت شد
0

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

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

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


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

ورود یا ثبت‌نام