Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Доброго времени суток. Нужна ваша помощь. Пытаюсь получить для пользователя (таблицы users) по его authid, данные которые хранятся в другой таблице (в моем случаи points).
Делал так:
User.php
class User extends Authenticatable
{
use HasFactory, Notifiable;
public function shop(){
return $this->belongsTo(Shop::class,'auth');
}
Shop.php
class Shop extends Model
{
use HasFactory;
protected $table="shop_players";
public function user(){
return $this->HasMany(User::class);
}
}
main.blade.php
{{Auth::user()->shop()->points}}
В результате получаю ошибку:
Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$points (View: /var/www/www-root/data/www/top-5ive.ru/resources/views/main.blade.php)
Где была допущена ошибка?
Не в сети
1. Ты написал что внешний ключ это поле authid, а в описании класса у тебя 'auth'. Где-то ты ошибся.
2. ->shop() возвращает объект типа Отношение. A чтобы получить связаный объект типа Shop, надо писать ->shop без скобок, как если бы это было свойство, а не метод.
Я сам так делаю и всем рекомендую: в tinker проверяю правильно ли я описал отношения.
В моём случае у User есть отношения favorites (как hasMany) и country (как belongsTo):
$ php artisan tinker
Psy Shell v0.9.12 (PHP 7.2.33-1+ubuntu16.04.1+deb.sury.org+1 — cli) by Justin Hileman
>>> $user = App\User::first()
=> App\User {#4652
id: 30,
. . .
}
>>> $user->favorites()->count()
=> 0
>>> $user->country()
=> Illuminate\Database\Eloquent\Relations\BelongsTo {#4656}
>>> $user->country
=> App\Country {#4660
id: 1,
name: "United States",
short_code: "USA",
telephone_code: "+1",
alpha2_code: "US",
iso_code: "",
}
Изменено artoodetoo (22.10.2020 05:20:59)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
P.S. Если будешь проверять в tinker, имей в виду: он не замечает изменений в файлах php, которые произошли после его запуска. Надо выйти (Ctrl+C) и зайти в него снова чтобы применить изменения.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Здраствуйте!
Что мне надо сделать, я написал в скриншоте.
Вот скриншот (https://prnt.sc/v4un4o)
В тинкер все показывает нормально.
root@ubuntu:/var/www/www-root/data/www/sitr.ru# php artisan tinker
Psy Shell v0.10.4 (PHP 7.4.11 — cli) by Justin Hileman
>>> App\Models\User::first();
=> App\Models\User {#4007
id: 1,
name: "MOK4SS",
created_at: "2020-10-18 22:47:31",
updated_at: "2020-10-18 22:47:31",
auth: "STEAM_0:1:449661230",
}
App\Models\Shop {#3294
id: 1,
name: "MOK4SS",
auth: "STEAM_1:1:449661230",
money: 99678789,
}
При попытке
$points = Auth::User()->shop->money;
>>> $points = Auth::User()->shop->money;
PHP Notice: Trying to get property 'shop' of non-object in /var/www/www-root/data/www/site.rueval()'d code on line 1
PHP Notice: Trying to get property 'money' of non-object in /var/www/www-root/data/www/site.rueval()'d code on line 1
=> null
Пожалуйста помогите.
Не в сети
читаем в документации (перевод на этом сайте)
Если ваша родительская модель не использует id в качестве первичного ключа, или вам бы хотелось присоединить дочернюю модель к другому столбцу, вы можете передать третий параметр в метод belongsTo(), который определяет имя связанного столбца в родительской таблице
Изменено vavprog (23.10.2020 06:45:38)
Не в сети