【问题标题】:Laravel returning empty collection even if the records exist即使记录存在,Laravel 也会返回空集合
【发布时间】:2018-01-18 10:27:25
【问题描述】:

以下是Model类

namespace App\Models\BaseModels;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Model;

class BallByBall extends Model
{
    use SoftDeletes;
    protected $table = 'ball_data';
    protected $primaryKey = 'trans_id';
    protected $guarded = [];
    protected $dates = ['deleted_at'];
}

ball_data 的架构是:

CREATE TABLE `ball_data` (
  `trans_id` int(10) NOT NULL AUTO_INCREMENT,
  `tour_id` int(11) DEFAULT NULL,
  `m_trans_id` int(11) DEFAULT NULL,
  `match_id` int(11) DEFAULT NULL,
  `team_id1` int(11) DEFAULT NULL,
  `team_id2` int(11) DEFAULT NULL,
  `innings` int(11) DEFAULT NULL,
  `batsman_id` int(11) DEFAULT NULL,
  `batsman_id2` int(11) DEFAULT NULL,
  `bowler_id` int(11) DEFAULT NULL,
  `fielder_id` int(11) DEFAULT NULL,
  `batsman_score` int(11) DEFAULT NULL,
  `bowler_given` int(11) DEFAULT NULL,
  `extra_runs` int(11) DEFAULT NULL,
  `total_runs` int(11) DEFAULT NULL,
  `team_runs` int(11) DEFAULT NULL,
  `for_wicket` int(11) DEFAULT NULL,
  `ball_no` int(11) DEFAULT NULL,
  `ball_type_id` int(11) DEFAULT NULL,
  `ball_type` varchar(573) DEFAULT NULL,
  `over_no` double DEFAULT NULL,
  `maiden` int(11) DEFAULT NULL,
  `wicket_id` int(11) DEFAULT NULL,
  `wicket_type` varchar(573) DEFAULT NULL,
  `wicket_desc` varchar(573) DEFAULT NULL,
  `ball_length_id` int(11) DEFAULT NULL,
  `ball_area_id` int(11) DEFAULT NULL,
  `field_type_id` int(11) DEFAULT NULL,
  `power_play` int(11) DEFAULT NULL,
  `remark` varchar(573) DEFAULT NULL,
  `commentry` varchar(573) DEFAULT NULL,
  `deleted_by` int(11) DEFAULT NULL,
  `updated_by` int(11) DEFAULT NULL,
  `deleted_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`trans_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5025 DEFAULT CHARSET=latin1

当我执行App\Models\BaseModels\BallByBall::get(); 时,我收到一个空集合。

【问题讨论】:

  • 你能显示你的表定义吗?
  • 显示浏览器结果!
  • 我手动创建了数据库。以下是它的架构。
  • 如果记录存在并且您已经根据数据库表正确定义了模型并且并非所有记录都已被软删除,那么您应该会在集合中收到一些条目。这意味着上述其中一项不正确。
  • 请使用以下 2 个查询的结果更新问题:DESCRIBE ball_data;SELECT * FROM ball_data LIMIT 5;

标签: php laravel


【解决方案1】:

您正在使用 SoftDeletes 特征,看起来您在 deleted_at 列中有一个时间戳,而不是此记录的 null。这意味着这条记录被软删除了,Laravel 默认不会显示它。

所以,使用withTrashed() 方法也包括所有软删除的行:

BallByBall::withTrashed()->get()

或将此记录更改为 deleted_atnull

【讨论】:

    【解决方案2】:

    我认为您必须使用一些东西来获取软删除记录,例如 ->withTrashed() 函数。那么是否可以get() 或all() 集合。

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多