لفرض أن لدينا جدول users ويحتوي على حقل role ويتم تخزين البيانات على شكل json كما بالصوره التالية
هنا في الـ migration يمكن تحديد النوع بـ json
$table->json('role');
كما نلاحظ أنه تم تحديد النوع بـ json.
لعرض البيانات يمكن إستخدام الدالة whereJsonContains حيث تأخذ two parameter وهما إسم الحقل ومن ثم كلمة البحث
أمثلة
لعرض المستخدمين الذين لديهم صلاحية writing
public function index() { $users=User::select('name','role')->whereJsonContains('role','writing')->get(); return $users; }
بالتالي سوف نحصل على النتائج التالية
[ { "name": "Ethar Shrouf", "role": "[\"reading\", \"writing\", \"deleting\"]" }, { "name": "Nidal", "role": "[\"reading\", \"writing\"]" } ]
لعرض المستخدمين الذين لديهم أكثر من صلاحية واحده
هنا يمكن إستخدام whereJsonLength
$users=User::select('name','role')->whereJsonLength('role','>', 1)->get(); return $users;
لكن لنفرض ان لدينا الحقل about ويحتوي على Json بالشكل التالي
{ "info":{ "hobbies":[ "swimming", "reading" ], "courses":[ "Laravel", "Vue", "React" ] }, }
لفرض أننا نريد الأشخاص الذين لديهم هواية reading
$users=User::select('name','role') ->whereJsonContains('about->info->hobbies','reading')->get();
كما نلاحظ أننا في الـ parameter الأول للدالة whereJsonContains نضع إسم الحقل ومن ثم key.
كما يمكننا تمرير مصفوفة
$users=User::select('name','role') ->whereJsonContains('about->info->hobbies',['reading','swimming']) ->get();
$user = User::where('id',1) ->update(['about->info->hobbies'=>["Playing Football", "writing"]]);
لقراءه بيانات json يمكن إستخدام الدالة json_decode
$user = User::findOrFail(1); return Json_decode($user->about);
وعوضاً عن إستخدام json_decode مع جملة eloquent يمكن إستخدام $casts ، حيث نذهب إلى User Model، ونقوم بتغريف $casts
protected $casts = [ 'about'=>'array' ];
ومن ثم في جملة eloquent لا نستخدم json_decode
$user = User::findOrFail(1); return $user->about;
لعرض المستخدمين الذين لديهم أكثر من hobbies
$users=User::select('name') ->whereJsonLength('about->info->hobbies','>',1) ->get();
$input = [ 'title' => 'Demo Title', 'data' => [ '1' => 'One', '2' => 'Two', '3' => 'Three' ] ]; $user= new User(); $user->name = 'aaa'; $user->email = 'b@m.com'; $user->password = 'm@m.com'; $user->about = $input; $user->save();
عااش
thanks
هل يمكن عمل search على بيانات من نوع json مثلا : \'full_name\',\'LIKE\',\"%{$search}%\"
جمييييييييل
زائر
ممتاز ، جزاك الله خيرا