Laravel, используйте промежуточное ПО для поиска Домена, затем найдите строку Веб-сайта, используя строку Домена. - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу использовать некоторое промежуточное программное обеспечение для получения строки из таблицы website, на эту строку ссылается моя таблица domains.

Пока это мое промежуточное ПО:

<?php

    namespace App\Http\Middleware;

    use App\Domains;
    use Closure;

    class Domain
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {

            $domainRow = Domains::where([ 'domain' => $_SERVER['HTTP_HOST'] ])->first();

            dd($domainRow->website);

            return $next($request);
        }
    }

А вот моя модель Domains, которая отлично работает, кроме hasOne part:

<?php

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Domains extends Model
    {

        public function website()
        {
            return $this->hasOne('App\Website');
        }

    }

Часть hasOne создает следующий запрос:

Неизвестный столбец 'sites.domains_id' в 'предложении where' (SQL: выберите * из websites, гдеwebsites. domains_id = 2 и websites. domains_id не является нулевым пределом 1)

Однако запрос, который мне нужно сделать, это:

ВЫБРАТЬ * ИЗ САЙТОВ ГДЕ id = 1

Где 1 из столбца website_id в таблице Домены.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Изменить метод сайта на:

public function website() 
{
    return $this->belongsTo('App\Website');
}
0 голосов
/ 26 сентября 2018

Laravel использует собственную «интеллектуальную» систему для обнаружения внешних ключей из локального ключа.Локальный ключ будет website_id в модели домена.И внешний ключ id находится в определении модели сайта.Попробуйте изменить отношение на:

return $this->hasOne('App\Website', 'website_id', 'id');

Таким образом, вы применяете собственные переменные, отключая собственную «интеллектуальность», применяемую laravel.Больше информации: Отношения Laravel One-to

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