Невозможно установить sh связь между двумя таблицами в Laravel - PullRequest
0 голосов
/ 20 января 2020

Я хочу создать связь между таблицей списков и атрибутов в laravel, для этого я использовал следующий код для установления связи sh между ними, но данные, на мой взгляд, не поступают из обеих таблиц. Я получаю следующую ошибку:

Вызов неопределенного отношения [adListAttributes] для модели [App \ Models \ AdListing].

Здесь список может иметь столько атрибутов, сколько и атрибутов может быть связан со многими списками

ad_listings:
id 
    title
    name 
    date
ad_list_attributes table :

    id
    listing_id
    name
    namespace App\Models;
    use Eloquent;

    use Illuminate\Database\Eloquent\Model;

    class AdListAttribute extends Model
    {
        protected $table = "ad_list_attributes";


        public function Listings()
        {
            return $this->belongsToMany('AdListing', 'id', 'listing_id');
        } 
    }
    namespace App\Models;
    use Eloquent;
    use Illuminate\Database\Eloquent\Model;

    class AdListing extends Model
    {
       protected $table = "ad_listings";

       public function Attributes()
        {
            return $this->belongsToMany('AdListAttribute', 'listing_id', 'id');
        } 
    }

Ответы [ 2 ]

1 голос
/ 20 января 2020

Проблема в том, что вы используете belongsToMany в обеих моделях. Это вызовет проблему.

В AdListAttribute модели,

    public function listing_information()
    {
        return $this->belongsTo('App\AdListing', 'id', 'listing_id');
    } 

В AdListing модели,

   public function adlisting_attributes()
    {
        return $this->hasMany('App\AdListAttribute', 'listing_id', 'id');
    } 

Вы можете получить результаты, используя,

 $response = AdListing::get();
 if($response->adlisting_attributes)
 {
   foreach($response->adlisting_attributes as $attribute)
   {
       echo $attribute->name;
   }
 }
0 голосов
/ 20 января 2020

Проблема в том, что вы не называете отношения с правильным именем, которое я предполагаю

$listings = AdListing::with('Attributes')->get();

Обновление:

Попробуйте это:

use App\Models\AdListAttribute;
//
return $this->belongsToMany(AdListAttribute::class, 'listing_id', 'id');

То же самое для другой модели, затем попробуйте

...