如何解决尝试在 Laravel 中播种表时出错
当我尝试执行 PHP artisan migrate:fresh --seed
命令时出现错误。我不明白它们是怎么回事,我不知道是什么导致了它们。问题描述如下。
<?PHP
namespace Database\Factories;
use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;
class PostFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Post::class;
/**
* Define the model's default state.
*
* @return array
*/
public function deFinition()
{
$title = $faker->realText(rand(10,40));
$short_title = \Illuminate\Support\Str::length($title) > 30 ? mb_substr($title,30) . "..." : $title;
$created = $faker->dateTimeBetween("-30days","-1days");
return [
"title" => $title,"short_title" => $short_title,"author_id" => rand(1,4),"descr" => $faker->realText(100,500),"created_at" => $created,"updated_at" => $created
];
}
}
DatabaseSeeder.PHP:
<?PHP
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
\App\Models\User::factory()->count(4)->create();
\App\Models\Post::factory()->count(15)->create();
}
}
当我执行 PHP artisan migrate:fresh --seed 时出现这些错误:
Illuminate\Database\QueryException
sqlSTATE[HY000] [2002],.. .
(sql: SHOW FULL TABLES WHERE table_type = 'BASE TABLE')
at C:\xampp\htdocs\laralove\vendor\laravel\framework\src\Illuminate\Database\Connection.PHP:692
688▕ // If an exception occurs when attempting to run a query,we'll format the error
689▕ // message to include the bindings with sql,which will make this exception a
690▕ // lot more helpful to the developer instead of just the database's errors.
Illuminate\Database\QueryException
sqlSTATE[HY000] [2002],which will make this exception a
690▕ // lot more helpful to the developer instead of just the database's errors.
691▕ catch (Exception $e) {
➜ 692▕ throw new QueryException(
693▕ $query,$this->prepareBindings($bindings),$e
694▕ );
695▕ }
696▕
1 C:\xampp\htdocs\laralove\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.PHP:70
PDOException::("sqlSTATE[HY000] [2002],.. .
")
2 C:\xampp\htdocs\laralove\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.PHP:70
PDO::__construct("MysqL:host=localhost;port=3306;dbname=laralove","root","",[])
我已经检查了错误描述中提供的文件中的行,但我不知道是什么导致了错误。
任何帮助都会非常感谢
UPD 0:
我尝试按照@Rwd 的建议将配置文件中的“localhost”更改为“127.0.0.1”。之前的错误都消失了。但现在我遇到了其他错误:
ErrorException
Undefined variable: faker
at C:\xampp\htdocs\laralove\database\factories\PostFactory.PHP:24
20▕ * @return array
21▕ */
22▕ public function deFinition()
23▕ {
➜ 24▕ $title = $faker->realText(rand(10,40));
25▕ $short_title = \Illuminate\Support\Str::length($title) > 30 ? mb_substr($title,30) . "..." : $title;
26▕ $created = $faker->dateTimeBetween("-30days","-1days");
27▕
28▕ return [
1 C:\xampp\htdocs\laralove\database\factories\PostFactory.PHP:24
Illuminate\Foundation\Bootstrap\HandleExceptions::handleError("Undefined variable: faker","C:\xampp\htdocs\laralove\database\factories\PostFactory.PHP",[])
2 C:\xampp\htdocs\laralove\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Factories\Factory.PHP:385
Database\Factories\PostFactory::deFinition()
UPD 1:
按照@Cristea 的建议将 $faker
替换为 $this->faker
,现在得到了以前的错误:
1 C:\xampp\htdocs\laralove\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.PHP:70
PDOException::("sqlSTATE[HY000] [2002],[])
如@Rwd 建议的那样,在 .env 和 database.PHP 中 localhost 仍更改为 127.0.0.1
解决方法
只需将 $faker
替换为 $this->faker
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。