在Laravel中,为什么我不能直接从数组中给Eloquent模型赋值?



这并没有引起任何问题,我只是对我遇到的一些行为完全感到困惑,所以希望您能提供一些见解。

在我的Laravel应用程序中,我点击一个API并像这样循环:

$response = Http::get('https://example.com/api');
$articles = $response->json();
foreach($articles as $article){
// do stuff
}
在循环中,我使用Eloquent模型将一些数据持久化到数据库中。让我完全困惑的是,如果这样做,它工作得很好:
$article_permalink = $article['permalink'];
$article_headline = $article['headline'];
$article = new Article;
$article->permalink = $article_permalink;
$article->headline = $article_headline;
$article->save();

然而,如果我只是从数组中直接赋值,它不工作,我收到下面的错误:

$article = new Article;
$article->permalink = $article['permalink'];
$article->headline = $article['headline'];
$article->save();
IlluminateDatabaseQueryException
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'permalink' cannot be null

我收到上述两个字段的错误。这些值绝对是在所有情况下定义的,只要在插入之前先将变量的数组版本赋值给标准变量,它就可以完美地工作。我还能错过什么呢?

感谢

您正在覆盖$article变量。所以当你分配你的模型属性$article不再是一个数组,而是一个空的文章模型对象。

试试这个:

$articleModel = new Article;
$articleModel->permalink = $article['permalink'];
$articleModel->headline = $article['headline'];
$articleModel->save();

或者,将循环更改为:

foreach($articles as $articleArray){
$article = new Article;
$article->permalink = $articleArray['permalink'];
$article->headline = $articleArray['headline'];
$article->save();
}

在你的模型上:永久链接和标题应该是可填充的:

class Atricle extends Model
{
protected $fillable = [
'permalink',
'headline',
];
}

相关内容

  • 没有找到相关文章

最新更新