Bu örnekte, Post
kaynağında user
ilişkisini her zaman eager load etmeye yönlendiren public static $with = ['user'];
satırını ekledik. Böylece, Subtitle
alanında user
ilişkisine erişirken, performansı artırmak için ilişki her zaman eager load edilir. Bu, özellikle büyük veri kümesi ile çalışırken önemlidir, çünkü gereksiz veritabanı sorgularının sayısını azaltır.
Öncelikle, modellerinizi oluşturarak başlayalım.
User
modeli:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use HasFactory;
public function posts()
{
return $this->hasMany(Post::class);
}
}
Post
modeli:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
public function user()
{
return $this->belongsTo(User::class);
}
}
Şimdi, Post
ve User
modelleri için Nova kaynakları oluşturalım.
Post
kaynağı:
namespace App\Nova;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\BelongsTo;
class Post extends Resource
{
public static $model = \App\Models\Post::class;
public static $with = ['user'];
public function fields(Request $request)
{
return [
ID::make(__('ID'), 'id')->sortable(),
BelongsTo::make('User'),
Text::make('Title')
->sortable()
->rules('required', 'max:255'),
Text::make('Subtitle', function () {
return 'Author: ' . $this->user->name;
}),
];
}
}
User
kaynağı:
namespace App\Nova;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\HasMany;
class User extends Resource
{
public static $model = \App\Models\User::class;
public function fields(Request $request)
{
return [
ID::make(__('ID'), 'id')->sortable(),
Text::make('Name')
->sortable()
->rules('required', 'max:255'),
HasMany::make('Posts'),
];
}
}