Laravel определяет несколько ключей foregin в моделях и получает ошибку - PullRequest
0 голосов
/ 01 июля 2018

для этой миграции как:

Schema::create('user_tickets', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->string('subject');
    $table->integer('ticket_number')->unique();
    $table->tinyInteger('priority')->default(2);
    $table->tinyInteger('section');
    $table->boolean('solved')->default(false);
    $table->timestamps();
});

и

Schema::create('user_tickets_answers', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->integer('ticket_id')->unsigned();
    $table->foreign('ticket_id')->references('id')->on('user_tickets')->onDelete('cascade');
    $table->text('reply',200);
    $table->timestamps();
});

laravel создай мне эти внешние ключи

user_tickets_answers_user_id_foreign
user_tickets_answers_ticket_id_foreign

в таблице user_tickets_answers, теперь, когда я пытаюсь получить данные user_tickets с отношением user_tickets_answers, такие как:

$tickets = UserTickets::with('reply')->get();

я получаю эту ошибку:

Base table or view not found: 1146 Table 'diabet.user_ticket_answers' doesn't exist (SQL: select * from `user_ticket_answers` where `user_ticket_answers`.`ticket_id` in (1))

как я могу определить эти внешние ключи на собственных моделях?

UserTickets:

class UserTickets extends Model
{
    protected $guarded = ['id'];

    public function reply()
    {
        return $this->hasMany(UserTicketAnswers::class, 'ticket_id');
    }
}

UserTicketAnswers:

class UserTicketAnswers extends Model
{
    protected $guarded = ['id'];

    public function ticket()
    {
        return $this->belongsTo(UserTickets::class);
    }
}

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Попробуйте изменить операторы, если это работает, потому что это работает для меня, когда у меня была эта ошибка ранее. Чтобы быть уверенным, еще раз проверьте Документация при передаче пользовательского ключа, например

('App \ Phone', 'foreign_key', 'local_key');


В модели UserTickets изменение

return $this->hasMany(UserTicketAnswers::class, 'ticket_id'); 

до

return $this->hasMany('App\UserTicketAnswers','ticket_id','id');


In UserTicketAnswers

return $this->belongsTo(UserTickets::class);

до

return $this->belongsTo('App\UserTickets','ticket_id','ticket_id');


та же логика с вашей User моделью.

public function userTickets(){
    return $this->hasMany('App\UserTickets','user_id','id');
}

public function userTicketAnswers(){
    return $this->hasMany('App\UserTicketAnswers','user_id','id');
}


Добавьте каждый к UserTickets и UserTicketAnswers модели

public function user{
    return $this->belongsTo('App\Users','user_id','user_id');
}
0 голосов
/ 01 июля 2018

Ваше имя таблицы отличается при миграции: оно user_tickets_answers , когда вы запрашиваете user_ticket_answers таблица в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...