لارافيل, Others / 2024-11-23

كيفية التعامل مع البيانات من نوع JSON في لارافيل

كيفية التعامل مع البيانات من نوع JSON في لارافيل

2024-11-23 وقت القراءه : 3 دقائق

لفرض أن لدينا جدول users ويحتوي على حقل role ويتم تخزين البيانات على شكل json كما بالصوره التالية

كيف يمكن التعامل مع هذه الحقل role؟ كيفية التعامل مع الحقول من نوع JSON؟


إنشاء الحقل role، إنشاء حقل من نوع JSON

هنا في الـ migration يمكن تحديد النوع بـ json

$table->json('role');

كما نلاحظ أنه تم تحديد النوع بـ json.


عرض البيانات من json field

لعرض البيانات يمكن إستخدام الدالة 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();


كيفية التعديل على بيانات JSON

$user = User::where('id',1)
    ->update(['about->info->hobbies'=>["Playing Football", "writing"]]);


كيفية قراءة بيانات Json

لقراءه بيانات 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();


إدخال البيانات على شكل JSON

$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();



التعليقات
زائر
منذ سنة

ممتاز ، جزاك الله خيرا

مجهول
منذ سنة

عااش

Mohammad
منذ سنة

thanks

زائر
منذ سنة

هل يمكن عمل search على بيانات من نوع json مثلا : \'full_name\',\'LIKE\',\"%{$search}%\"

زائر
منذ سنة

جمييييييييل

إضافة تعليق
Loading...