Ниже приведены мои отношения в Laravel, я не могу войти в компанию, используя Объект пользователя, но я получаю ноль когда я пытаюсь получить к нему доступ, пожалуйста, смотрите мой код ниже, чтобы получить картину
Ниже приведены мои модели
<?php
namespace App\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Zizaco\Entrust\Traits\EntrustUserTrait;
use Session;
use Illuminate\Support\Facades\DB;
class User extends Authenticatable
{
use Notifiable;
use EntrustUserTrait;
protected $table = 'tbl_users';
protected $primaryKey = 'id';
protected $guarded = ['id'];
const API = 'api';
const WEB = 'web';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'last_login', 'Address', 'Age', 'DateOfBirth', 'created_by', 'deleted_by'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
protected $casts = [
'is_admin' => 'boolean',
];
public function isAdmin()
{
return $this->is_admin;
}
static function GetUserNamebyID($id)
{
$name = User::select("name")->where(["id" => $id])->pluck('name');
if (isset($name[0])) {
return $name[0];
} else {
return '';
}
}public function loginlogout()
{
$this->hasMany("App\Models\LoginLogoutLogs", 'userID');
}
public function company()
{
$this->hasMany("App\Models\Company", "company_id");
}
}
И следующая модель моей компании
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use DB;
use App\Models\CarePlanData;
use Session;
class Company extends Model
{
protected $table = 'companies';
protected $primaryKey = 'id';
protected $guarded = ['id'];
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'phone_no', 'address', 'password', 'description', 'city', 'company_logo', 'country', 'email'
];
static public function fetchAllActiveCompanies()
{
return DB::table("companies")->where(['is_active' => 1])->pluck('name', 'id');
}
// change company to hasmany
public function users()
{
return $this->hasmany('App\Models\User');
}
}
и вот как я пытаюсь получить доступ к компании, но я получаю ноль.
public function fetchCompany(){
$User = User::find($user->id);
dd($User->company());
}
в первую очередь вы делаете
public function fetchCompany(){
$User = User::find($user->id);
dd($User->company());
}
но это должно быть
public function fetchCompany(){
$User = User::find($user->id);
dd($User->company()->get());
}
или же
public function fetchCompany(){
$User = User::find($user->id);
dd($User->company);
}
Пожалуйста, также проверьте User::find($user->id)
дает вам объект или нет. Если нет, то вы не можете получить компанию не объект
Прежде всего, если пользователь принадлежит 1 компании, это должно быть:
public function company()
{
$this->belongsTo("App\Models\Company", "company_id");
}
затем fetchCompany()
должно быть
public function fetchCompany(){
$User = User::with('company')->find($user->id);
dd($User->company);
}
Вам нужно использовать with
загрузить отношения. Вы передаете имя функции, которая определяет отношение в вашем User
модель для with
как это with('function_name')
,
на самом деле, если ваш company_id
поле находится на модели пользователя, то ваше отношение должно быть
public function company()
{
$this->belongsTo("App\Models\Company", "company_id");
}
разве у пользователя может быть много компаний?