Geri çağırış Lim10Ata\Flatix\xfwidgets::gethtml yanlışdır (error_invalid_class).

Forumda sizi görməkdə şadıq 👋,

Forum məzmununa və bütün xidmətlərimizə daxil olmaq üçün qeydiyyatdan keçməli və ya foruma daxil olmalısınız. Foruma üzv olmaq tamamilə ödənişsizdir.

Qeydiyyatdan keç

Laravel-də MySQL JSON sütunları ilə işləmək

3

Add.Az

BoT
BoT
Qoşuldu
22 Dek 2022
Mesajlar
172
Reaksiya hesabı
80
Xallar
28
Məkan
Baki
Web sayt
www.add.az

Laravel-də MySQL JSON sütunları ilə işləmək​

Bu yazıda mysqlin json sütunları ilə işləməyi görəcəyik. Deyək e-ticarət saytında bəzi malların sahələrinin nə olacağını bilmirik və ya sonradan əlavə oluna bilər (rəng,ölçü və s.) burada json sahələri köməyə gəlir.

Laraveldə json tipində verilənlərlə işləməyi isə sadə crud (create,read,update,delete) əməliyyatı ilə görəcəyik.

1680106454838.png

ADDIM 1. MIQRASIYA + MODEL​

JSON sahəsini yaratmaq üçün Laravel migration-da etməli olduğumuz şey ->json() metodundan istifadə etməkdir:

Kod:
Schema::create('products', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->decimal('price', 15, 2);
    $table->json('properties');
    $table->timestamps();
    $table->softDeletes();
});
Sonra app/Models/Products modelinə daxil oluruq:

class Product extends Model
{
protected $casts = [
'properties' => 'array'
];

$cats içində array deyərək biz verilənlərin array tipində olacağını bildiririk əlavə olaraq verilənlər bazasında olan sütünları $fillable içində göstərrik:

protected $fillable = ['name','price','properties'];


ADDIM 2. VIEWS DA PRODUCTS/CREATE BLADE SƏHIFƏSI YARADIRIQ.​

Kod:
<div class="container">
    <h2 class="text-center mt-5">Laravel JSON Columns Create</h2>
     <form action="{{ route("products.store") }}" method="POST">
    @csrf
    <div class="form-group mt-5">
        <label for="name">Name</label>
        <input type="text" name="name" class="form-control">
    </div>
    <div class="form-group">
        <label for="price">Price</label>
        <input type="number" name="price" class="form-control" step="0.01">
    </div>
    <div class="form-group">
        <label for="properties">Properties</label>
        <div class="row">
            <div class="col-md-2">
                Key:
            </div>
            <div class="col-md-4">
                Value:
            </div>
        </div>
        @for ($i=0; $i <= 4; $i++)
        <div class="row">
            <div class="col-md-2 mt-1">
                <input type="text" name="properties[{{ $i }}][key]" class="form-control" value="{{ old('properties['.$i.'][key]') }}">
            </div>
            <div class="col-md-4">
                <input type="text" name="properties[{{ $i }}][value]" class="form-control" value="{{ old('properties['.$i.'][value]') }}">
            </div>
        </div>
        @endfor
    </div>
    <div class="d-flex justify-content-between mt-2">
        <a href="{{ route('products.index') }}"><button type="button" class="btn btn-primary">Back</button></a>
        <input class="btn btn-danger mt-2" type="submit" value="Create" />
    </div>
</form>
    </div>

1680106588857.png

ADDIM 3. MƏLUMATLARIN SAVE EDILMƏSI​

ProductController adında resource controller yaradırığ və store da kodları yazırığ.

public function store(Request $request)
{
Products::create($request->all());
return redirect()->route('products.index');
}
Null olan yerlərin yoxlanması üçün app/Model/Products.php validasiya əlavə edəcəyik:

public function setPropertiesAttribute($value)
{
$properties = [];

foreach ($value as $array_item) {
if (!is_null($array_item['key'])) {
$properties[] = $array_item;
}
}

$this->attributes['properties'] = json_encode($properties);
}

STEP 4. VERILƏNLƏRIN GÖSTƏRILMƏSI:​

ProductController index:

public function index()
{
$products = Products::all();
return view('products.index',compact('products'));
}
resources/views/products/index.blade.php

<div class="container mt-5">
<h2 class="text-center mb-5">Laravel JSON Columns</h2>
<a href="{{ route('products.create') }}"><button type="button" class="btn btn-primary float-end">Create</button></a>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Price</th>
<th scope="col">Properties</th>
<th scope="col"></th>
</tr>
</thead>
<tbody class="table-group-divider">
@foreach($products as $product)
<tr>
<th scope="row">{{ $loop->iteration }}</th>
<td>{{ $product->name ?? '' }}</td>
<td>{{ $product->price ?? '' }}</td>
<td>
@foreach ($product->properties as $property)
<b>{{ $property['key'] }}</b>: {{ $property['value'] }}<br />
@endforeach
</td>
<td>
<a href="{{ route('products.edit',$product->id) }}"><button type="button" class="btn btn-primary">Edit</button></a>
<form action="{{ route('products.destroy',$product->id) }}" method="POST" class="d-inline">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger" onclick="return confirm('Are you sure?')">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>

1680106588878.png

ADDIM 5. REDAKTƏ ET:​

ProductController edit function

public function edit(Products $product)
{
return view('products.edit',compact('product'));
}
resources/views/products/edit.blade.php:

<div class="container">
<h2 class="text-center">Laravel JSON Columns Update</h2>
<form action="{{ route('products.update',$product->id) }}" method="POST">
@method('put')
@csrf
<div class="form-group mt-5">
<label for="name">Name</label>
<input type="text" name="name" class="form-control" value="{{ $product->name ?? '' }}" />
</div>
<div class="form-group">
<label for="price">Price</label>
<input type="number" name="price" class="form-control" step="0.01" value="{{ $product->price ?? '' }}" />
</div>
<div class="form-group">
<label for="properties">Properties</label>
<div class="row">
<div class="col-md-2">
Key:
</div>
<div class="col-md-4">
Value:
</div>
</div>
@for ($i=0; $i <= 4; $i++)
<div class="row">
<div class="col-md-2 mt-1">
<input type="text" name="properties[{{ $i }}][key]" class="form-control"
value="{{ $product->properties[$i]['key'] ?? '' }}">
</div>
<div class="col-md-4">
<input type="text" name="properties[{{ $i }}][value]" class="form-control"
value="{{ $product->properties[$i]['value'] ?? '' }}">
</div>
</div>
@endfor
</div>
<div class="d-flex justify-content-between mt-2">
<a href="{{ route('products.index') }}"><button type="button" class="btn btn-primary">Back</button></a>
<input class="btn btn-danger mt-2" type="submit" value="Update" />
</div>
</form>
</div>
1680106588905.png

ADDIM 6. SILMƏ PROSESI:​

public function destroy(Products $product)
{
return to_route('products.index')->with($product->delete());
}


NƏTICƏ:​

Qısaca laravel json sütünları belə idi. Json sahələrdən istifadə etmək məntiqlidi mi ? RDMBS verilənlər bazasında, sorgu edilən yerlərdə json sahədən istifadə etmək çoxda əlverişli deyil. Əlavə olaraq Laravel Eloquent json sahələrlə əlaqəni dəstəkləmədiyi üçün sorguların olduğu yerlərdə json sahədən istifadə etsəniz Eloquent istifadə etmədən sorgu yazmalı olacaqsınız ki buda zəhmətli işdir.
 
2

SoxulcanPRO

Aktiv istifadəçi
WebMaster
Qoşuldu
26 Mar 2023
Mesajlar
82
Reaksiya hesabı
37
Xallar
18
Laravel müasir PHP çərçivəsidir və MySQL kimi verilənlər bazası ilə asanlıqla inteqrasiya edə bilir. Bu yolla siz Laravel və MySQL-in xüsusiyyətlərindən biri olan JSON sütunlarından istifadə edərək məlumatları daha effektiv idarə edə bilərsiniz.

Birincisi, Laravel-də MySQL JSON sütunlarını manipulyasiya etmək üçün verilənlər bazasında JSON sütunu yaratmalısınız. Bu sütunu yaratmaq üçün Miqrasiya fayllarından istifadə edə bilərsiniz. Aşağıdakı nümunə Miqrasiya faylı istifadəçilər cədvəlində JSON sütunu yaradır:

PHP:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddJsonColumnToUsersTable extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->json('settings')->nullable();
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('settings');
        });
    }
}

Yuxarıdakı Miqrasiya faylında parametrlər adlı JSON sütunu yaradılır. Bu sütunun nullable() kimi göstərilməsi o deməkdir ki, bu sütun null dəyərləri ehtiva edə bilər.

JSON sütunlarını yaratdıqdan sonra Laravel-də onlara daxil olmaq olduqca asandır. Aşağıdakı nümunə kod parçası istifadəçilər cədvəlindəki JSON sütunundan məlumatları oxuyur:


PHP:
$user = DB::table('users')->where('id', 1)->first();
$settings = json_decode($user->settings, true);


Yuxarıdakı fraqmentdə məlumatlar istifadəçilər cədvəlində id 1 olan istifadəçinin parametrlər sütunundan götürülür və PHP-də json_decode funksiyasından istifadə edərək massiləyə çevrilir.

Eyni şəkildə, Laravel JSON sütununa məlumat yazmaq üçün asan bir yola malikdir. Aşağıdakı nümunə kod parçası məlumatları istifadəçilər cədvəlindəki JSON sütununa yazır:


PHP:
$data = ['key' => 'value'];
DB::table('users')->where('id', 1)->update(['settings' => json_encode($data)]);

Yukarıdaki kod parçasında, users tablosundaki id'si 1 olan kullanıcının settings sütununa json_encode fonksiyonu kullanılarak $data dizisi yazılır.

Laravel'da MySQL JSON sütunları ile işlem yapmak oldukça kolaydır ve bu sütunların kullanımı, verilerin daha etkili bir şekilde yönetilmesine olanak tanır.


mövzu ücün təşəkkürlər...
 

Hamza

www.Add.Az - Peşəkarlar burada görüşür
Sayt Rəhbəri
Qoşuldu
15 Avg 2022
Mesajlar
593
Reaksiya hesabı
641
Xallar
93
Məkan
Bakı, Azərbaycan
Web sayt
add.az
Laravel müasir PHP çərçivəsidir və MySQL kimi verilənlər bazası ilə asanlıqla inteqrasiya edə bilir. Bu yolla siz Laravel və MySQL-in xüsusiyyətlərindən biri olan JSON sütunlarından istifadə edərək məlumatları daha effektiv idarə edə bilərsiniz.

Birincisi, Laravel-də MySQL JSON sütunlarını manipulyasiya etmək üçün verilənlər bazasında JSON sütunu yaratmalısınız. Bu sütunu yaratmaq üçün Miqrasiya fayllarından istifadə edə bilərsiniz. Aşağıdakı nümunə Miqrasiya faylı istifadəçilər cədvəlində JSON sütunu yaradır:

PHP:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddJsonColumnToUsersTable extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->json('settings')->nullable();
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('settings');
        });
    }
}

Yuxarıdakı Miqrasiya faylında parametrlər adlı JSON sütunu yaradılır. Bu sütunun nullable() kimi göstərilməsi o deməkdir ki, bu sütun null dəyərləri ehtiva edə bilər.

JSON sütunlarını yaratdıqdan sonra Laravel-də onlara daxil olmaq olduqca asandır. Aşağıdakı nümunə kod parçası istifadəçilər cədvəlindəki JSON sütunundan məlumatları oxuyur:


PHP:
$user = DB::table('users')->where('id', 1)->first();
$settings = json_decode($user->settings, true);


Yuxarıdakı fraqmentdə məlumatlar istifadəçilər cədvəlində id 1 olan istifadəçinin parametrlər sütunundan götürülür və PHP-də json_decode funksiyasından istifadə edərək massiləyə çevrilir.

Eyni şəkildə, Laravel JSON sütununa məlumat yazmaq üçün asan bir yola malikdir. Aşağıdakı nümunə kod parçası məlumatları istifadəçilər cədvəlindəki JSON sütununa yazır:


PHP:
$data = ['key' => 'value'];
DB::table('users')->where('id', 1)->update(['settings' => json_encode($data)]);

Yukarıdaki kod parçasında, users tablosundaki id'si 1 olan kullanıcının settings sütununa json_encode fonksiyonu kullanılarak $data dizisi yazılır.

Laravel'da MySQL JSON sütunları ile işlem yapmak oldukça kolaydır ve bu sütunların kullanımı, verilerin daha etkili bir şekilde yönetilmesine olanak tanır.


mövzu ücün təşəkkürlər...
Tewekkurler
 
2

Shukur_23

Tanınmış istifadəçi
Silver istifadeci
Qoşuldu
6 Sen 2022
Mesajlar
143
Reaksiya hesabı
27
Xallar
28
çox sağolun
 
3

LOCALHOST

Məhşur istifadəçi
WebMaster
Qoşuldu
3 Sen 2022
Mesajlar
278
Reaksiya hesabı
125
Xallar
43
Təşəkkürlər bilməyənlər üçün gözəl konseptdir.
Ümumi php (core) oop ilə işləyənlər laravelə keçid etməyi həm inkişaf üçün gözəldir.
Həmdə bucür mövzuları görmək qırağdan insanı şad edir.
Yavaş yavaş köhnə temalardan ayılır forum
 
Üst