【问题标题】:laravel save method not saving data completelylaravel保存方法不完全保存数据
【发布时间】:2015-11-05 18:34:47
【问题描述】:

我正在使用 Laravel 创建一个网络机器人,它从其他网站收集数据并将其存储在我的 MySQL 数据库中。当我想保存body 时,我使用dd($this->render($post));,这很好。然而,当我使用$post->save() 将我的帖子保存在数据库中时,它并没有完全保存我的帖子正文,并且缺少一些文本。

我的body 至少有 10000 个字符,我总是遇到这个问题。

我检查了textlongtext 的正文列类型,没有任何区别...

问题出在哪里?

编辑:

这是我的索引方法:

 public function getIndex()
    {
        $temp = App\Temp::where('status' , 0)->orderBy('id' , 'desc')->first();
        $temp->status = 1;
        $temp->save();
        $post = new App\Post;
        $post->title = $temp->title;
        $post->link = $temp->link;
        $post->desc = $temp->desc;
        $post->cat_id = $temp->cat_id;
        $post->url_id = $temp->url_id;
        $post->body = $this->render($post);
        $post->save();
        echo "+";
    }

当我在保存前使用dd($this->render($post)); 时,它显示全文没有任何问题...但是在我获取正文时保存后,帖子末尾缺少一些字符...

这是render() 方法...

public function render($post)
    {
        echo "Start : ";
        $this->ftp->createFolder('/'.$post->url_id.'/'.$post->id."/");
        echo "Dir - ";
        $mixed_body = $this->desc($post->title);
        echo "Mix - ";
        $body ="";
        $body = $body . '<h3><a href='.$this->postUrl.'>'.$this->postTitle.'</a></h3>';
        echo "Title - ";

        while(strlen($mixed_body) > 100)
        {
            $body = $body . $this->randImage($post);
            $body = $body . $this->randTitle();

            //insert a random paragraph
            $number = rand(100 , strlen($mixed_body));//temporary
            $paragraph = substr($mixed_body , 0 , $number);
            $mixed_body = substr($mixed_body , $number , strlen($mixed_body)-$number);

            $body = $body . '<p>' . $paragraph . '</p>';
            echo "P|";
        }
        echo "\nDone : ".strlen($body);
        return $body;
    }

render() 中的其他方法正在向$body 附加一些文本,这些并不重要。

还有我的模特:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model {

    public function tags()
    {
        return $this->hasMany('App\Tag');
    }

}

【问题讨论】:

  • 您的模型是否有 $fillable 属性,并且其中包含 body 属性? docs
  • TEXT 65,535 字节,LONGTEXT 4,294,967,295 字节 ~4GB... 对我来说似乎有所不同...。请注意,这是 byte 大小,而不是字符大小
  • 在您调用save 方法之前,请您发布创建/获取模型并进行列分配的其余代码。问题可能就在那里。
  • Forreal- 发布您的代码...例如,您是否曾经将正文分配给帖子? $post->body = $body; $post->save();
  • @MikelBitson 帖子已编辑...

标签: php mysql laravel


【解决方案1】:

我找到了我的问题原因... 有时我的身体里有一个像�这样的字符,laravel不会保存它之后的字符... 我发现用这一行来删除�字符...

$post->body = mb_convert_encoding($this->render($post), 'UTF-8', 'UTF-8');

感谢大家的帮助,我头痛得很厉害,想休息一下……

再次感谢大家,晚安/早上/下午(根据您的时区):)

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 2020-07-03
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2020-03-27
    • 2018-02-22
    • 2022-09-23
    • 2019-07-08
    相关资源
    最近更新 更多