Хочу таблицу Contacts в которой поле Company - объект из другой таблицы Вот я создал две модели Код (Text): <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Contact extends Model { use HasFactory; use SoftDeletes; protected $guarded = []; protected $table = 'contacts'; public $timestamps = true; /** * The model's default values for attributes. * * @var array */ protected $attributes = [ 'name' => '' ]; public $appends = [ 'company' ]; public function company() { return $this->belongsTo('App\Models\Company'); } public function getCompanyAttribute() // эту функцию вставил, потому что без нее ругалось { return 'XXX'; } } } Код (Text): <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Company extends Model { use HasFactory; use SoftDeletes; protected $guarded = []; protected $table = 'companies'; public $timestamps = true; /** * The model's default values for attributes. * * @var array */ protected $attributes = [ 'name' => '' ]; public function contacts() { return $this->hasMany('App\Models\Contact'); } } Вот миграции Код (Text): <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateCompaniesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('companies', function (Blueprint $table) { $table->id(); $table->timestamps(); $table->softDeletes(); $table->string('name')->nullable(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('companies'); } } Код (Text): <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateContactsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('contacts', function (Blueprint $table) { $table->id(); $table->timestamps(); $table->softDeletes(); $table->string('name')->nullable(); $table->foreignId('company_id')->nullable()->constrained(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('contacts'); } } Теперь хочу вывести на форму название контакта и соответствующую компанию. Код (Text): $contact = \App\Models\Contact::find(1); $company = $contact->company; Сначала не выводило сосем, ругалось, что не найден метод getCompanyAttribute Я вставил такой метод. Теперь выводит XXX. Я пробовал писать на месте XXX так: $self->company Ругалось, Undefined property: App\Models\Contact::$company Как получить связанную компанию?
1. Судя по всему у вас тут связь один (компания) ко многим (контакты) поэтому надо сначала в модель компании добавить связь Код (Text): public function contacts(): HasMany { return $this->hasMany(Contact::class); } а в модель контактов добавить принадлежность Код (Text): public function company(): BelongsTo { return $this->belongsTo (Company::class) } и тогда из модели компании вы сможете получить все контакты в коллекции $company->contacts вот тут подробнее https://laravel.com/docs/8.x/eloquent-relationships
Вы правы, связь такая. И я так все и сделал. У меня не работало из-за строчки public $appends = [ 'company' ]; Убрал и заработало $contact->company Но мне нужно получать список всех полей. Я его беру в массив и перебираю. Как мне в этот массив брать связи?