Asked Apr 11th, 8:51 AM 145 1 2
  • 145 1 2
0

Em xin hỏi về vấn đề Many To Many (Polymorphic) trong Laravel với ạ !!!

Share
  • 145 1 2

Em có 3 table như sau

user
    id
    name
    ...
cities
    id
    name
multi_cities
    id
    city_id
    model_type
    model_id

Em thực hiện code liên kết các bảng như sau ạ

class User extends Authenticatable
{
    use Notifiable;
    public function cities()
    {
        return $this->morphToMany('App\City', 'model');
    }
}
class City extends Model
{
    protected $table = 'cities';
    protected $fillable = ['name'];
    public function users() {
        return $this->morphedByMany('App\User', 'model');
    }

    public function jobs() {
        return $this->morphedByMany('App\Job', 'model');
    }
}
class MultiCity extends Model
{
    protected $table = 'multi_cities';
    protected $fillable = ['city_id', 'model_type', 'model_id'];
}

Em thử query trong route như sau:

Route::get('/user', function () {
    $user = App\User::find(3);
    foreach ($user->cities as $city) {
        echo $city . '<br>';
    }
});

Báo lỗi không tìm thấy table tương ứng với model Bác nào thông não e với 😃)

2 ANSWERS


Answered Apr 11th, 9:34 AM
Accepted
+3

nó đang báo lỗi bảng job_here.models không tồn tại kìa bạn.

Share
Apr 12th, 6:53 AM
    public function cities()
    {
        return $this->morphToMany('App\City', 'model', 'multi_cities');
    }

Thử xem được ko nhé.

0
| Reply
Share
duongricky @duongricky
Apr 13th, 3:51 AM

@tiennguyen98 dạ được rồi a, e cảm ơn

+1
| Reply
Share
Answered Apr 12th, 1:39 AM
+2

thay

public function cities()
    {
        return $this->morphToMany('App\City', 'model');
    }
}

bằng

public function cities()
    {
        return $this->morphToMany('App\City', 'multi_cities');
    }
}

tương tự với morphedByMany. Check docs nhá bạn: https://laravel.com/docs/5.8/eloquent-relationships#many-to-many-polymorphic-relations :v

Share