Estoy trabajando en el código de otra persona en un proyecto y cuando intento ejecutar la php artisan migrate , ¡me aparece un error!
class SeedAdminUser extends Migration { /** * Run the migrations. * * @return void */ public function up() { // seed admin user $admin = User::create([ 'name' => 'Admin', 'email' => 'admin@admin.se', 'password' => Hash::make('password'), 'plan_id' => null, ]); $admin->assignRole(['administrator', 'company']); $plan = Plan::find(1); Subscription::create([ 'user_id' => 1, 'plan_id' => $plan->id, 'starts_at' => Carbon::now(), 'ends_at' => $plan->interval == 'monthly' ? Carbon::now()->addMonth() : Carbon::now()->addMonths(12), ]); } Recibo un error debido a esta línea 'plan_id' => $plan->id,
Aquí está el mensaje de error -
ErrorException Trying to get property 'id' of non-object at database/migrations/2021_06_04_055759_seed_admin_user.php:34 30| 31| $plan = Plan::find(1); 32| Subscription::create([ 33| 'user_id' => 1, > 34| 'plan_id' => $plan->id, 35| 'starts_at' => Carbon::now(), 36| 'ends_at' => $plan->interval == 'monthly' ? Carbon::now()->addMonth() : Carbon::now()->addMonths(12), 37| ]); 38| } 1 database/migrations/2021_06_04_055759_seed_admin_user.php:34 Illuminate\Foundation\Bootstrap\HandleExceptions::handleError("Trying to get property 'id' of non-object", "/Applications/MAMP/htdocs/iSurvey/database/migrations/2021_06_04_055759_seed_admin_user.php", [Object(App\User)]) +21 vendor frames 23 artisan:37 Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) Cualquier idea de qué está mal con esa línea 'plan_id' => $plan->id, y cómo solucionarlo
Esto se debe a que no hay registros en el modelo de plan. Primero verifique si existen registros en el modelo de plan.
dd($plan);o
$plan = $plan ? $plan->id : '';El problema es exactamente lo que dice el error. $plan no es un objeto, por lo que intentar acceder a una propiedad en él da como resultado un error.
¿Por qué $plan no es un objeto? Porque Plan::find(1); no puede encontrar un plan con una identificación de 1. $plan probablemente sea null , por lo que está ejecutando efectivamente null->id .
Dado que está ejecutando migraciones, es posible que desee asegurarse de que este código se ejecute después de que se complete la tabla de planes. Le daría una oportunidad con php artisan migrate:fresh --seed (advertencia: esto vaciará sus tablas de base de datos y luego las volverá a llenar con migraciones/sembradoras) o siembra en general.
Considere también usar findOrFail en lugar de find para generar una excepción si no se encuentra el modelo, ya que su código posterior en este ejemplo depende del modelo que se encuentre.
Asegúrese de que sus planes estén sembrados antes de que se ejecute esta migración. Es más seguro usar findOrFail en su lugar. De esta manera, sabrá el instante en que no se encuentra un plan.