I'm building a package in Laravel 4 but am getting a non-object error when attempting to access the db from which seems to be a properly instantiated object. Here's the setup:
The config and class in question:
composer.json:
... "autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ], "psr-0": { "Vendor\\Chat": "src/vendor/chat/src" } } ...
The class:
namespace Vendor\Chat; use Illuminate\Database\Eloquent\Model as Eloquent; class ChatHistory extends Eloquent { protected $table = 'chat_history'; protected $fillable = array('message', 'user_id', 'room_token'); public function __construct($attributes = array()) { parent::__construct($attributes); } }
The call:
$message = new Message($msg); $history = new ChatHistory; $history->create(array( 'room_token' => $message->getRoomToken(), 'user_id' => $message->getUserId(), 'message' => $message->getMessage(), ));
The error:
PHP Fatal error: Call to a member function connection() on a non-object in /home/vagrant/project/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php on line 2894
I believe I'm missing something fundamental and under my nose. Thanks for any and all help!
EDIT:
Here is the class that's instantiating ChatHistory and calling the write:
namespace Vendor\Chat; use Ratchet\MessageComponentInterface; use Ratchet\ConnectionInterface; use Vendor\Chat\Client; use Vendor\Chat\Message; use Vendor\Chat\ChatHistory; use Illuminate\Database\Model; class Chat implements MessageComponentInterface { protected $app; protected $clients; public function __construct() { $this->clients = new \SplObjectStorage; } public function onOpen(ConnectionInterface $conn) { $client = new Client; $client->setId($conn->resourceId); $client->setSocket($conn); $this->clients->attach($client); } public function onMessage(ConnectionInterface $conn, $msg) { $message = new Message($msg); $history = new ChatHistory; ChatHistory::create(array( 'room_token' => $message->getRoomToken(), 'user_id' => $message->getUserId(), 'message' => $message->getMessage(), )); /* error here */ /* ... */ } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); } public function onError(ConnectionInterface $conn, \Exception $e) { $conn->close(); } protected function getClientByConn(ConnectionInterface $conn) { foreach($this->clients as $client) { if($client->getSocket() === $conn) { return $client; } } return null; } }
The fact that DB isn't available suggest that Eloquent isn't being loaded up top?