SQLSTATE [23000]: нарушение ограничения целостности: 1052. Красноречивая проблема Laravel при присоединении к таблице - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть таблица новостей, и столбец в блейд-таблице posted by пуст, но в моей таблице новостей столбец users_id, который опубликован, имеет значение users_id.Я не могу получить пользователя, который разместил конкретные новости в конкретной школе.У меня уже есть рабочий запрос для новостей, но проблема в том, что я не могу присоединиться к таблице users, где находится name пользователя, который разместил эту новость.Может кто-то знает в чем проблема моего запроса?Помощь будет оценена.Спасибо

Индекс контроллера

public function index()
    {
        //testing query that returns an error
        $userschool = Newsboard::select('users.name', 'news.school_id')
                        ->join('users', 'users.id', '=', 'news.users_id')
                        ->where('school_id', Auth::user()->school_id)->get();


         //the query that i want still returns an error because of the auth
        $postedby = DB::select(
            "SELECT news.*, users.name as postedby from news
            JOIN users on news.users_id = users.id
            WHERE news.school_id AND news.active = 1 AND news.school_id = 'Auth::user()->school_id'");


       //working queries and i dont know how to convert the $postedby query join to eloquent.
        if (Auth::user()->role == 0) {
            $news = Newsboard::where('active','=',1)->get();

        } elseif (Auth::user()->role == 1 || Auth::user()->role == 5) {

            $news = Newsboard::where('school_id', '=', Auth::user()->school_id ) 
                ->where('active','=',1)
                ->get();

        } else {
            $role = Auth::user()->role;
            $news = Newsboard::where('school_id', '=', Auth::user()->school_id  )
                ->where('status', '=', 1)
                ->where('active','=',1)
                ->whereRaw("group_id in('$role', '0')")
                ->get();

        }
        dd($userschool);

        return view('admin.pages.news.index', [
            'page_title' => $this->page_title,
            'news' => $news,
            'mnuname' => 'News',

        ]);

    }

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Установите свой Auth :: user () -> school_id как переменную

$school_id = Auth::user()->school_id;

//the query that i want still returns an error because of the auth
$postedby = DB::select(
            "SELECT news.*, users.name as postedby from news
             JOIN users on news.users_id = users.id
             WHERE news.school_id AND news.active = 1 AND news.school_id = '$school_id'");

Или это:

Newsboard::select('users.name', 'news.school_id')
    ->join('users', 'users.id', '=', 'news.users_id')
    ->where(['news.school_id' => $school_id])->get();
1 голос
/ 27 сентября 2019

Поскольку в таблицах users и news содержится столбец school_id, поэтому там, где условие должно иметь префикс table.

Пожалуйста, попробуйте:

$userschool = Newsboard::select('users.name', 'news.school_id')
    ->join('users', 'users.id', '=', 'news.users_id')
    ->where('news.school_id', Auth::user()->school_id)->get();

//or 

//the query that i want still returns an error because of the auth
$postedby = DB::select("SELECT news.*, users.name as postedby from news
    JOIN users on news.users_id = users.id
    WHERE news.school_id AND news.active = 1 AND news.school_id = '".Auth::user()->school_id."'");


0 голосов
/ 27 сентября 2019
$school_id = Auth::user()->school_id; 

$userschool = Newsboard::select('users.name', 'news.school_id')
                        ->join('users', 'users.id', '=', 'news.users_id')
                        ->where('school_id', $school_id)->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...