【发布时间】:2015-10-09 21:36:12
【问题描述】:
我正在使用 Laravel 5.1 并尝试将一行插入到通过 SSH 隧道连接的远程数据库中,并且读取正常。我有一个本地数据库和各种远程数据库。这段代码曾经可以工作,我只是在 DigitalOcean 中克隆了我的 droplet,以便它指向另一个远程数据库,然后问题就出现了。
当我创建远程 Promotion 时,我得到了一个主键 ID,但是当我读回它并在 MySQL Workbench 上检查它时,所有字段都有默认值,主要是 NULL 和 0。知道发生了什么吗?
以下配置适用于我正在尝试写入的远程数据库。
数据库配置
'prod' => [
'read' => [
'options' => [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET time_zone = \'-04:00\''
]
],
'write' => [],
'driver' => 'mysql',
'host' => env('PROD_DB_HOST', 'localhost'),
'port' => env('PROD_DB_PORT', '3306'),
'database' => env('PROD_DB_DATABASE', 'forge'),
'username' => env('PROD_DB_USERNAME', 'forge'),
'password' => env('PROD_DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
型号
<?php
namespace App\Models\Remote;
use Illuminate\Database\Eloquent\Model;
class Promotion extends Model
{
protected $connection = null;
protected $table = 'Tournament';
protected $primaryKey = 'tournamentId';
protected $guarded = ['tournamentId'];
public $timestamps = false;
public function __construct()
{
$this->connection = env('APP_ENV');
}
public function gameplayLogs()
{
return $this->hasMany('GamePlayLog', 'tournamentId');
}
public function scopeActive($query)
{
return $query->where('status', 3);
}
}
** 创造 **
public function deployPromotionMain($id)
{
$post = json_decode(file_get_contents("php://input"), true);
$today = date('Y-m-d H:i:s');
$promo = \Promotion::with(['assets'])->find($id);
$data = [
'name' => $promo->name,
'description' => $promo->description,
'gameId' => intval($promo->gameId),
'categoryId' => intval($promo->categoryId),
'subCategoryId' => intval($promo->subCategoryId),
'advertiserId' => $promo->advertiserId,
'advertiserCost' => 0,
'gamePlays' => $promo->gamePlays,
'promoStartDate' => '2015-01-01 00:00:00',
'promoEndDate' => '2015-01-02 00:00:00',
'createdDate' => $today,
'updatedDate' => $today,
'promoFileDuration' => 0,
'eventStartDate' => $promo->promoStartDate,
'eventEndDate' => $promo->promoEndDate,
'eventStartTime' => '0:00 AM',
'eventEndTime' => '11:00 PM',
'minPlays' => 1,
'maxPlays' => 0,
'minAge' => 18,
'maxAge' => 0,
'scoringId' => 1,
'minLevel' => 1,
'maxLevel' => 0,
'tournamentDifficultyId' => 1,
'timeId' => 1,
'timeOut' => 15,
'defaultPrice' => 0,
'limitGames' => 1,
'distributorId' => 0,
'stateId' => 0,
'locationTypeId' => 0,
'questionSetId' => 0,
'status' => 3,
'sendEmail' => 1,
'kioskModelId' => 2,
'triviaCategoryId' => 1,
'duration' => 0
];
foreach ($promo->assets as $a) {
switch($a['assetTypeId']) {
case 1:
$data['eventFilePath'] = 'uploadfiles/tournament/event/'.$a['assetName'];
$data['promoFilePath'] = 'uploadfiles/tournament/promo/'.$a['assetName'];
break;
case 2:
$data['imageFilePath'] = 'uploadfiles/tournament/image/'.$a['assetName'];
$data['thumbnailFilePath'] = 'uploadfiles/tournament/image/'.$a['assetName'];
break;
case 3:
$data['iconFilePath'] = 'uploadfiles/tournament/icon/'.$a['assetName'];
break;
case 7:
$data['ruleFilePath'] = 'uploadfiles/tournament/rule/'.$a['assetName'];
break;
default:
break;
}
}
foreach ($post['env'] as $env) {
if ($env == 'dev') {
$dev_promo = \PromotionRemote::create($data);
... //At this point I dumped $data and it had the right values but the entry had all null's and 0's and whatnot.
注意:\Promotion:: 是本地数据库的推广,我基本上是复制到远程数据库。
【问题讨论】:
-
你能把这段代码粘贴到你实际创建并保存对象的地方吗?加上DefaultRemote的代码
-
谢谢。 “此时我转储了 $data 并且它具有正确的值” - 如果在这个阶段一切正常,那么在以后的阶段有些东西被破坏了。你也可以粘贴 PromotionRemote 吗?
标签: php mysql laravel eloquent