php - enviar - mail::send laravel example
Laravel pertenece a no trabajar (5)
Tengo 2 modelos en mi aplicación, ''User'' y ''MedicineType'' (cada usuario pertenece a un MedicineType).
Hice la relación de uno a muchos entre dos modelos mediante belongsTo () y hasMany (). La relación hasMany () funciona perfectamente, pero belongTo () no funciona. ¿Alguien sabe dónde me equivoqué?
User :: find (1) -> medicine_type [esto no devuelve nada]
MedicineType :: find (1) -> usuarios [esto devuelve usuarios]
Aquí está el código para los modelos:
class MedicineType extends Eloquent {
public function users()
{
return $this->hasMany(''User'');
}
}
class User extends Eloquent {
public function medicine_type()
{
return $this->belongsTo(''MedicineType'');
}
}
Y aquí está mi estructura de base de datos:
users:
id
name
medicine_type_id
medicine_types:
id
name
¡Cometí el error estúpido de no agregar el "retorno" en el método de relación!
Asegúrate de devolver la relación ... Obviamente esto no funcionará:
public function medicineType()
{
$this->belongsTo(''MedicineType'', ''id'');
}
Cambié "medicine_type" a "medicineType" y todo salió bien ...
En mi caso, los datos de los modelos relacionados se eliminaron y la actualización no obtiene los datos eliminados en la consulta general. Para obtener los datos eliminados de manera suave, debe usar "withTrashed () o onlyTrashed ()".
Puedes consultar la documentación aquí.
La razón por la que su relación no funciona no es por las relaciones especificadas en el modelo, sino por el nombre del método en el modelo de Usuario y no por la especificación de la clave externa.
En lugar de:
public function medicine_type()
{
return $this->belongsTo(''MedicineType'');
}
Utilizar:
public function medicineType()
{
return $this->belongsTo(''MedicineType'', ''id'');
}
Espero que esto funcione para ti ;)
Todo junto:
<?php // app/models/MedicineType.php
class MedicineType extends Eloquent {
// Determines which database table to use
protected $table = ''medicine_types'';
public function users()
{
return $this->hasMany(''User'');
}
}
y:
<?php // app/models/User.php
class User extends Eloquent {
// Determines which database table to use
protected $table = ''users'';
public function medicineType()
{
return $this->belongsTo(''MedicineType'', ''id'');
}
}
Probando si funciona:
$user = User::find(1);
return $user->medicineType->name;
Esto devuelve con éxito el nombre del tipo de medicina relacionado.
Espero que esto te ayude aún más;)
Tal vez haya un problema con Eloquent para encontrar la clave externa. Prueba esto:
class User extends Eloquent {
public function medicine_type()
{
return $this->belongsTo(''MedicineType'', ''medicine_type_id'');
}
}
EDITAR:
Además, Eloquent intenta encontrar la tabla "medicinetypes" y no "medecine_types", por lo que debe especificar eso también utilizando la variable $table
.
class MedicineType extends Eloquent {
protected $table = ''medicine_types'';
public function users()
{
return $this->hasMany(''User'');
}
}