سلام من موقع استفاده از رابطه چند به چند بین Role و Karbar به خطای زیر میخورم
LogicException
App\Models\Karbar::roles must return a relationship instance, but "null" was returned. Was the "return" keyword used?
این از مدل role
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
use HasFactory;
public function karbars()
{
$this->belongsToMany(Karbar::class);
}
}
مدل karbar
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Karbar extends Model
{
use HasFactory;
public function roles()
{
$this->belongsToMany(Role::class);
}
}
اینم از روت
Route::get('karbar/role', function () {
$role_karbar=Role::find(2)->karbars;
echo $role_karbar->name;
});
ممنون میشم کمک کنید دوستان.
سلام.
یک رابطه باید مقدار برگردونه ولی متاسفانه مقدار رو شما return نکردید.یعنی به شکل زیر
```
return $this->belongsToMany(Role::class);
@mirzamohammad.com
سلام من از لارول چیزه زیادی نمیدونم ولی برای رابطه چند به چند بین دو جدول نیاز به جدول سومی هم دارید که رابطه های بین دو جدول رو ذخیره کنه.
@hbr
اینم از جدول واسط
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateKarbarRoleTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('karbar_role', function (Blueprint $table) {
$table->id();
$table->string('karbar_id');
$table->string('role_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('karbar_role');
}
}
سلام به شما دوست عزیز.
به صورت زیر بنویسید:
Route::get('karbar/role', function () {
$role_karbar=Role::karbars()->find(2);
echo $role_karbar->name;
});
موفق باشید.
@rezajahangir
بعید میدونم روتم مشکل داشته باشه
حالا من چیزیم که شما گفتیدا امتحان کردم و خطای زیرا گرفتم
Non-static method App\Models\Role::karbars() cannot be called statically
سلام وقت بخیر ،
مشکل شما از جدول واسط هست ،
یک مورد رو خیلی بی دقتی کردید شما id هارو از نوع string تعریف کردید!!!
اما تعریف رابطه داخل جدول واسط باید به این نوع نوشته بشه :
Schema::create('permission_user' , function(Blueprint $table) {
$table->unsignedBigInteger('permission_id');
$table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->primary(['permission_id' , 'user_id']);
});
داخل این مثال جدول user و permission باهم ارتباط چند به چند دارن ابتدا گفته شده نوعش عددی هست در خط بعدش گفته شده id جدول مورد نظر که users یا permissions هست باهم ارتباط دارن و اگر یکی از دیتاها پاک شود داخل جدول دیگر هم پاک میشه و رکورد های تکراری هم نداریم داخل دیتابیس
سلام.
یک رابطه باید مقدار برگردونه ولی متاسفانه مقدار رو شما return نکردید.یعنی به شکل زیر
```
return $this->belongsToMany(Role::class);
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟