How to fix when using EmailAddress as column name - laravel-5.8

I am using the default auth in Laravel 5.8 (using make:auth) but cannot get the Reset Password functionality to work. I have an existing Users table (yes Uppercase U!) which has EmailAddress as the username column name and I suspect this is part of the problem. How may I fix this?
I have modified the Users model and ForgotPasswordController as follows:
class User extends Authenticatable implements MustVerifyEmail
{
// use Notifiable, HasRoles, UsesUuid; // Traits
use Notifiable, UsesUuid;
protected $table = 'Users';
protected $primaryKey = 'Id';
protected $username = 'EmailAddress';
protected $guarded = [];
protected $hidden = [
'password', 'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
public function getEmailAttribute()
{
return $this->attributes['EmailAddress'];
}
}
class ForgotPasswordController extends Controller
{
use SendsPasswordResetEmails;
protected $username = 'EmailAddress';
public function __construct()
{
$this->middleware('guest');
}
public function username()
{
return 'EmailAddress';
}
protected function validateEmail(Request $request)
{
$request->validate(['EmailAddress' => 'required|email']);
}
protected function credentials(Request $request)
{
return $request->only('EmailAddress');
}
protected function sendResetLinkFailedResponse(Request $request, $response)
{
return back()
->withInput($request->only('EmailAddress'))
->withErrors(['EmailAddress' => trans($response)]);
}
}
I expect to receive an email with the reset link but this never gets sent. The /password/reset page does not redirect, just reloads.

Related

How To DYnamic Menu with Laravel Relation

I'm trying to create a nestable dynamic menu with Laravel. I have a hasMany relationship and I'm trying to get categories->subcategory->menu
this is my categories model
class KategoriModel extends Model
{
protected $table = "sys_kategori";
protected $fillable = [
'Kategori',
'Ikon',
'Slug',
];
public function subcategories()
{
return $this->hasMany(SubKategoriModel::class, 'idKategori','id');
}
}
this is my subcategory model
class SubKategoriModel extends Model
{
use HasFactory;
protected $table = "sys_subkategori";
protected $fillable = [
'subKategori',
'idKategori',
'ikon',
'slug',
];
public function kategori()
{
return $this->belongsTo(KategoriModel::class, 'idSubkategori', 'id');
}
public function subsubmenu()
{
return $this->hasMany(MenuModel::class, 'idSubkategori', 'id');
}
}
this is my subsubmenu model
class MenuModel extends Model
{
use HasFactory;
protected $table = "sys_menu";
protected $fillable = [
'Menu',
'idSubkategori',
'Ikon',
'Slug',
];
public function subKategori()
{
return $this->belongsTo(SubKategoriModel::class, 'id', 'idSubkategori');
}
}
this is my controller
'kategori' => KategoriModel::with('subMenu.subsubmenu')->get(),
when id dd the variable its only show
my dd
and there is no relation from subcategory and submenu
thank in advnace

How to get the company ID of the Logged in user from a related table

I am trying to get the logged in user's company_id, In my Laravel 8 Job Portal application. I have these models:
Department
User
Company
CompanyProfile
A User can only appear once on the users table with unique email. But he can have more than one CompanyProfile, since he can work remotely for more than one Company:
These are the models:
class Department extends Model
{
protected $table = 'departments';
protected $primaryKey = 'id';
protected $fillable = [
'id',
'company_id',
'name',
];
public function company()
{
return $this->belongsTo('App\Models\Company','company_id');
}
}
class Company extends Model
{
protected $table = 'companies';
protected $primaryKey = 'id';
protected $fillable = [
'id',
'name',
'org_image',
];
public function users()
{
return $this->hasMany('App\Models\User');
}
public function departments()
{
return $this->hasMany('App\Models\Department');
}
}
class User extends Authenticatable
{
protected $hidden = [
'password',
'remember_token',
];
protected $fillable = [
'name',
'first_name',
'other_name',
'last_name',
'username',
'email',
'password',
];
public function profile(){
return $this->hasMany('App\Models\CompanyProfile', 'employee_id');
}
public function company(){
return $this->hasMany('App\Models\CompanyProfile', 'company_id');
}
}
class CompanyProfile extends Model
{
protected $table = 'company_profiles';
protected $primaryKey = 'id';
protected $fillable = [
'id',
'user_id',
'company_id',
'department_id',
'employment_date',
];
}
Having in mind that the company_id is not in the User model, How do I get the company_id of the Logged in User in the DepartmentController?
public function index()
{
$departments = Department::where('company_id', ...)->get();
return view('departments.index')->with('departments', $departments);
}
Thanks
Here, you can use "hasManyThrough" relationship
change company relationship in user model as below
public function company(){
return $this->hasManyThrough('App\Models\Company', 'App\Models\CompanyProfile');
}
https://laravel.com/docs/8.x/eloquent-relationships#has-many-through
I am not sure about this but as per scenario i will do it like this
public function index()
{
$user_id = Auth::user()->id;
$users_data = User::where('id',$user_id)->with('company')->first();
$company_id = $users_data->company->company_id;
$departments = Department::where('company_id', $company_id)->get();
return view('departments.index')->with('departments', $departments);
}

Laravel: SoftDeletes doesnt work when I add $appends field

I have a model with softdeletes, if I add A appends field my sofdeletes implementation doesnt work, somebody knows what is happend?
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Users extends Model
{
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $table = 'users';
protected $appends = ['assigned'];
protected $fillable = ['category_id'];
public function __construct()
{
$this->assigned = false;
}
public function setAssignedAttribute($value)
{
$this->attributes['assigned'] = $value;
}
public function getAssignedAttribute($value)
{
return $value;
}
}
It's not your appends field. It's your constructor not calling the parent constructor which is what boots your soft deletes trait. Add a parent::__construct() to your constructor. It should match the signature of the parent as well so it should be:
public function __construct(array $attributes = [])
{
$this->assigned = false;
parent::__construct($attributes);
}
You misread the documentation, your accessor doesn't have the right name:
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Users extends Model
{
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $table = 'users';
protected $appends = ['assigned'];
protected $fillable = ['category_id'];
public function __construct()
{
$this->assigned = false;
}
public function setIsAssignedAttribute($value)
{
$this->attributes['assigned'] = $value;
}
public function getIsAssignedAttribute($value)
{
return $value;
}
}
You need the Is even thought it is not part of the variable name.

Inverse relation returns null using Eloquent

I have a simple one-to-many relationship, where one authentication type has many client:
class Client extends Model {
protected $table = 'client';
protected $primaryKey = 'client_id';
protected $fillable = [
'client_id',
'auth_type_id',
];
public function auth()
{
return $this->belongsTo('App\AuthType', 'foreign_key', 'id');
}
}
class AuthType extends Model {
protected $table = 'authType';
protected $primaryKey = 'id';
protected $fillable = [
'id',
'name'
];
public function users()
{
return $this->hasMany('App\User', 'foreign_key', 'auth_type_id');
}
}
So what I want is, to access the name of the authentication, when the $client is known.
$authType = $client->auth();
$authType->name;
And I get:
Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$name
How can I access the name property of Auth, if I have a Client ?
If you want to get the relation result you have to use
$authType = $client->auth;
If you use $client->auth() you'll get back a BelongsTo relation.

Laravel 5.1 Eloquent Relationship

Is there anyone can suggest from the eloquent relationship that I have based on the screenshot and model setup?
Model setup:
class Leaves extends Model
{
protected $table = 'leaves';
protected $fillable = [
'leave_type',
'user_id'
];
public function user()
{
return $this->belongsTo('App\User');
}
}
class LeaveType extends Model
{
protected $table = 'leave_type';
protected $fillable = ['type_name'];
}
class User extends Model implements AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;
protected $table = 'users';
protected $fillable = ['name', 'email', 'password'];
protected $hidden = ['password', 'remember_token'];
public function leave()
{
return $this->hasMany('App\Leaves');
}
}
Currently I only able to get the leaves detail but need to retrieve the leave_type's type_name based on
$user = User::oldest('name')->get();
foreach ($users as $user) {
$user->leave()-get();
}
in your Leave model you would have
function type() {
return $this->hasOne(App\LeaveType);
}
in your LeaveType you should reciprocate
function leave() {
return $this->belongsToMany(App\LeaveType);
}
and in your controller:
$user = User::oldest('name')->with('leave', 'leave.type')->get();
dd($user->leave->type);
Leaves model:
class Leaves extends Model {
protected $table = 'leaves';
protected $fillable = [
'leave_type',
'user_id'
];
public function User()
{
return $this->belongsTo('App\User');
}
public function LeaveType()
{
return $this->belongsTo('App\LeaveType');
}
}
LeavesType model:
class LeaveType extends Model {
protected $table = 'leave_type';
protected $fillable = ['type_name'];
public function Leaves()
{
return $this->hasMany('App\Leaves');
}
}
User model:
class User extends Model implements AuthenticatableContract,
AuthorizableContract,
CanResetPasswordContract
{
use Authenticatable, Authorizable, CanResetPassword;
protected $table = 'users';
protected $fillable = ['name', 'email', 'password'];
protected $hidden = ['password', 'remember_token'];
public function Leaves()
{
return $this->hasMany('App\Leaves');
}
}

Resources